Help us understand the problem. What is going on with this article?

Slim(PHP Framework)事始め

More than 3 years have passed since last update.

あらまし

ここ最近、配属先でSlimを使っているけど、かなり特殊で複雑な使い方をしているので、slimな使い方を調べてみました。

ちなみに、slimという名前は一般的な名前な為か、GAE用のフレームワークだとかテンプレートエンジンにも同じ名前のものがあるようです。

導入

Slimを見ると

<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

require 'vendor/autoload.php';

$app = new \Slim\App;
$app->get('/hello/{name}', function (Request $request, Response $response) {
    $name = $request->getAttribute('name');
    $response->getBody()->write("Hello, $name");

    return $response;
});
$app->run();

というように書いてありますが、もう少し下の

$ php composer.phar create-project slim/slim-skeleton [my-app-name]

から始めるとよさそうです。
ちなみに、これで始めた場合のディレクトリ構成は

$ tree -L 2
.
├── CONTRIBUTING.md
├── README.md
├── composer.json
├── composer.lock
├── logs
├── phpunit.xml
├── public
│   └── index.php
├── src
│   ├── dependencies.php
│   ├── middleware.php
│   ├── routes.php
│   └── settings.php
├── templates
│   └── index.phtml
├── tests
│   └── Functional
└── vendor
    ├── autoload.php
    ├── bin
〜以下、ライブラリ

というような感じになります。

後は、以下書いてあるとおり、

$ php -S 0.0.0.0:8080 -t public public/index.php

で、webサーバが立ち上がるので、このまま開発も出来ます。

ディレクトリ構成

composer.jsonの内容はこんな感じ

composer.json
{
    "name": "slim/slim-skeleton",
    "description": "A Slim Framework skeleton application for rapid development",
    "keywords": ["microframework", "rest", "router", "psr7"],
    "homepage": "http://github.com/slimphp/Slim-Skeleton",
    "license": "MIT",
    "authors": [
        {
            "name": "Josh Lockhart",
            "email": "info@joshlockhart.com",
            "homepage": "http://www.joshlockhart.com/"
        }
    ],
    "require": {
        "php": ">=5.5.0",
        "slim/slim": "^3.1",
        "slim/php-view": "^2.0",
        "monolog/monolog": "^1.17"
    },
    "require-dev": {
        "phpunit/phpunit": ">=4.8 < 6.0"
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "scripts": {
        "start": "php -S 0.0.0.0:8080 -t public public/index.php",
        "test": "phpunit"
    }
}

見ての通りphpunitが導入してあるので、

$ php composer.phar test

で、初期のルーティングのテストも出来ます。
もっとも、このままだと自前のクラスなどが使えないので、こんな感じに付け加えておくといいのではないでしょうか?

composer.json
    "autoload": {
        "psr-4": {
            "Achme\\": "src/achme/classes"
        }
    },

ちなみに、Achmeというのは、(諸説あるらしいですが)ある映画に出てくる会社の名前のようです。
恐らく、ドメイン名のexample.comと同じ意味合いで使用されているのではないでしょうか?
もっとも、FuelPHPなど他のフレームワークなどではAppを使用しているので、Appとするのが一般的かもしれません。

PHPMDの導入

$ php composer.phar require --dev phpmd/phpmd

こうしておくと、PHPMDの導入が出来ます。

composer.json
    "scripts": {
        "start": "php -S 0.0.0.0:8080 -t public public/index.php",
        "test": "phpunit",
        "phpmd": "phpmd src/ text cleancode,codesize,controversial,design,naming,unusedcode"
    }

まだ自分でルールセットを作るような事は出来ていませんが、プロジェクトでルールセットを導入しておくと開発がスムーズに進めそうです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした