LoginSignup
28
27

More than 5 years have passed since last update.

PHPのフレームワーク Slim入門

Last updated at Posted at 2016-11-25

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
});
28
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
27