あらまし
ここ最近、配属先で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の内容はこんな感じ
{
"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
で、初期のルーティングのテストも出来ます。
もっとも、このままだと自前のクラスなどが使えないので、こんな感じに付け加えておくといいのではないでしょうか?
"autoload": {
"psr-4": {
"Achme\\": "src/achme/classes"
}
},
ちなみに、Achmeというのは、(諸説あるらしいですが)ある映画に出てくる会社の名前のようです。
恐らく、ドメイン名のexample.comと同じ意味合いで使用されているのではないでしょうか?
もっとも、FuelPHPなど他のフレームワークなどではAppを使用しているので、Appとするのが一般的かもしれません。
PHPMDの導入
$ php composer.phar require --dev phpmd/phpmd
こうしておくと、PHPMDの導入が出来ます。
"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"
}
まだ自分でルールセットを作るような事は出来ていませんが、プロジェクトでルールセットを導入しておくと開発がスムーズに進めそうです。