Silexでコントローラを使う

2016.12.23 (金)

Silexのコントローラの典型的な使い方というかベスト・プラクティスみたいなものがあまりなくていろいろ探していたら、コントローラのきれいなスケルトンを作っている方がおられました。
https://github.com/jaresz/SilexSkeleton
概ねこんな感じになっています。

  • composer.jsonに名前空間を登録する
  • comcomposerをupdateする
  • コントローラーの作成と設定

という感じです。コントローラーをグループ化したりしたい場合はサービスを使うと便利らしいです。
http://silex-users-jp.phper.jp/doc/html/organizing_controllers.html

名前空間を登録する

名前空間を指定することでまるっとファイルをもってこれるのでこれを使います。
composer.jsonに以下を追加してupdateします。

{
    "require": {
        "silex/silex": "~1.1",
        ...
        "swiftmailer/swiftmailer": "5.*"
    },
    "autoload": {
        "psr-0": {
            "ugApp\\": "src/ugApp"
        }
    }
}

composerのupdate

php composer.phar update

コマンドを実行すると、 /silex/vendor/composer/autoload_namespaces.php に名前空間とディレクトリをマッピングするための情報が書き込まれます。※場合によっては、composer[777]、autoload_namespaces.php[666]にしないと書き込めないです。

// autoload_namespaces.php @generated by Composer

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);

return array(
    'ugApp\\' => array($baseDir . '/src/ugApp'), ← これ追加される
    'Twig_' => array($vendorDir . '/twig/twig/lib'),
    ....
    'Doctrine\\Common\\' => array($vendorDir . '/doctrine/common/lib'),
);

Silex-Skeleton

とはいえ、あまりにもシンプルなSilexにある程度機能の揃ったかたちで提供されているSilex-Skeletonというのを使った方がいいかもしれないです。(いや、だから最初からSymfony2使えって話ですかね。)
https://github.com/silexphp/Silex-Skeleton

silex-service-controllers

こんなのもありました。
https://github.com/davedevelopment/silex-service-controllers
SILEX CONTROLLERS AS SERVICES


http://www.karakaram.com/silex-tutorial3
http://stackoverflow.com/questions/26703923/silex-class-not-found