Slimとは
PHPのマイクロフレームワークの一種であり、
HTTPリクエストを受け取って、適切なコールバックを呼び出し、HTTPレスポンスを返す。
マイクロフレームワークとは
機能は最低限しかないが、インストールや使用するコストの低いフレームワークのこと。
Slimの他にはSilexやLimonadeなどが存在する。
マイクロフレームワークの逆はフルスタックと呼ばれる。
フルスタックは学習コストが高いが、それ一つで必要な機能がすべて揃っているフレームワークのこと。
LaravelやCakePHPなどが存在する。
どうやって使うか?
まずは一つ具体例
get()メソッド
$app = new \Slim\Slim();
$app->get('/hoge',function($request, $response, $args){
echo "hogehoge";
});
$app->run();
すごく簡単に書くとこんな感じ。
get()メソッドの引数は2つ。
第一引数:ルートパターン '/hoge'
第二引数:ルートコールバック function(){ echo "hogehoge"}
この場合、/hogeにgetでリクエストがあった場合に echo "hogehoge"となる。
get以外のリクエストの場合にはどうするか
$app->get()をpostの場合はpost,deleteの場合はdeleteに変更すればOK
すべてのHTTPリクエストメソッドに処理ルートを追加するにはany()を使用する。
$app->any('/hoge', function($request, $response, $args){
echo "hogehoge"
});
これで/hogeにgetやpostなどのHTTPリクエストがあった場合にecho "hogehoge"となる。
ルートパターンについて詳しく
ここで説明する部分は$app->get('/hoge',function(){});の'/hoge'の部分
プレースホルダ
$app->any('/search/{id}', function($request, $response, $args){
例えば検索結果の表示をする際、/searchの後に検索対象のidがつく場合などに使用できる。
{id}の値は第三引数の$argsに値が含まれている。
オプション
オプションは、あってもなくても同じ挙動にしたい時に使用するもの。
例えば'/hoge'と'/hoge/'のように末に/があってもなくても同じにするには[]でくくる。
$app->any('/hoge[/]', function($request, $response, $args){
$app->any('/hoge[/{id}]', function($request, $response, $args){
グループでくくる
$app = new \Slim\App();
$app->group('/users', function () {
$this->any('/hoge', function ($request, $response, $args) {
echo 'hogehoge';
});
$this->any('/fuga', function ($request, $response, $args) {
echo 'fugafuga';
});
});
/hogeも/fugaも/users配下にある場合
「/users/hoge」「/users/fuga」と書かずに
$app->group('/users', function () {
を使用してグループでまとめることができる。
ルートコールバックについて簡単に
ここで説明する部分は$app->get('/hoge',function(){});のfunction(){}の部分
コールバックの引数は3つ
function($request, $response, $args){}
第一引数:Psr\Http\Message\ServerRequestInterface現在のHTTPリクエストを表すオブジェクト
第ニ引数:Psr\Http\Message\ResponseInterface現在のHTTPレスポンスを表すオブジェクト
第三引数:現在のルートの名前のプレースホルダの値が含まれている連想配列
$app->any('/search/{id}', function($request, $response, $args){ // {id}の値が10だとしたら
echo $args['id']; // 10
});