PHPでwebサービスを作りたい場合、フレームワークを使って作る事があると思いますが、PHPのフレームワークって色んな種類があって、どれを使うべきなのか迷います。

有名なのは、CakePHP、Laravel、FuelPHP、Symfony、CodeIgniter、Zend Framework辺りでしょうか。日本においてはCakePHPが一番使われていて、今後Laravelが伸びてくるというのが共通認識のようです。

以前より小規模なサイトをPHPでいくつか作りましたが、その際も上記の様なフレームワークを使おうと思って色々と調べていました。ただ、そこまでの機能を必要としていなく、とりあえずルーティングとテンプレートだけあればよかったので、いわゆるマイクロフレームワークと呼ばれる「Slim」を使ってみました。

Slimのインストール方法

composerを使ってインストールします。Slimには、slim-skeletonというものが用意されており、それを使うとpublicやsrc、logsなどのディレクトリが自動で作られるので、1から作るときに便利です。

php composer.phar create-project slim/slim-skeleton [my-app-name]
[my-app-name]の所に、任意の名前をつけると、その名前でディレクトリが作られます。

何も考えずにドキュメントルートである、publicにアクセスすると

エラー画面

とエラーが出ちゃうので、logsディレクトリにサーバーの書き込み権限をつければOKです。

インストールが成功した画面

再度アクセスすると、無事表示されましたね。

ルーティング

ではルーティングについて見ていきます。slimのルーティングの基本は下記のような形です。

$app->get('/hello/{id}', function ($request, $response, $args) {
    // 処理を書く
    echo $args['id'];
});

上記の場合、/hello/hoge でアクセスした場合だと、hoge が出力されます。

その他にも、正規表現でマッチさせることも可能で、
$app->get('/hello/{id:[0-9]+}', function ($request, $response, $args) {
    // 処理を書く
    echo $args['id'];
});

上記の場合、/hello/1 や /hello/123 は問題なくアクセスできますが、/hello/hoge の場合は404になります。

ルーティングに関しては、GETメソッド以外にも、POST、PUT、DELETEなどもあり、複数のメソッドにマッチさせる事もできます。公式サイトにその辺りが詳しく書いてあります。

テンプレートエンジンとしてTwigを使う

ルーティングの設定がわかった所で、次はテンプレートエンジンとしてTwigを使ってみます。Slim3に対応した「Twig-View」というものがあるので、こちらを使います。

Twig-Viewのインストール

こちらもcomposerを使ってインストールします。

composer require slim/twig-view

インストールが完了したら、各種設定をしていきます。
なお、以下は全てslim-skeletonを使った場合のファイル名です。

/src/dependencies.phpに以下を追記

$container['view'] = function ($c) {
    $settings = $c->get('settings');
    $view = new Slim\Views\Twig($settings['view']['template_path'], $settings['view']['twig']);

    // Add extensions
    $view->addExtension(new Slim\Views\TwigExtension($c->get('router'), $c->get('request')->getUri()));
    $view->addExtension(new Twig_Extension_Debug());
    return $view;
};

/src/settings.phpに以下を追記

return [
    'settings' => [

        ・・・

        // View settings
        'view' => [
            'template_path' => '{テンプレートのパス}',
            'twig' => [
                'cache' => '{キャッシュのパス}',
                'debug' => true,
                'auto_reload' => true,
            ],
        ],

        ・・・
    ],
];

Twigを使う場合の書き方

$app->get('/hello/{id:[0-9]+}', function ($request, $response, $args) {
    $id = $args['id'];
    return $this->view->render($response, 'hello.html', ['id' => $id]);
});

上記例の場合、urlからidを取得し、変数idに格納して、それを「hello.html」という名のテンプレートファイルに、変数idを渡しています。

hello.htmlの方で

{{ id }}

と書くと、変数idが表示されます。

{{ }}というのはTwigの記述法です。公式サイトに詳しく書いてあります。

ドキュメントが少なくて苦労

Slimは2015年末に、バージョン3がリリースされました。以前までのバージョン2と比べると全体的に書き方が変わっている所がいくつかあります。途中動かなくてネットで調べまくりましたが、バージョン2の書き方しかされてない事も多く苦労しましたが、なんとか動いてやりたいことは出来ているので、今後も使っていこうと思っています。

参考にしたサイト

以下のサイトを参考にしました。ありがたや。