Symfony2のアプリ開発4
今日は4億円が貰える券を買いました。年末が楽しみです。
というわけでまだまだ続くこのお話。終わりが全く見えませんが、
一応Symfony2の話については簡単なDBアクセスまで書く予定です。
あくまでも予定ですので、途中で飽きて備忘録等になるかも知れませんがその時はお許しを。
早速前回の続きでコントローラの話です。
前回ではコントローラはrouting.ymlとマッチングするという所まで書きました。
じゃあ、そのrouting.ymlとは何者かを書いていきましょう。
routing.ymlとは以下のように記述するとフレームワーク側でうまいこと処理してくれます。
なんでこうなるのだではなく、こうなんだという事を覚えてください。
app_sample_homepage: pattern: /hello/{name} defaults: { _controller: AppSampleBundle:Default:index }
じゃあこの中身を説明しましょう。
app_sample_homepageとは、アプリ内で使用するエイリアス名みたいなものです。定義に別名をつけたもんですね。
その次からが重要になります。
必ず字下げを行って書いてください。字下げで書かないとエラーになります。
patternとは、URLのリソースの定義となります。前回説明したようにURLに/helloと書くのは、
このpatternが/helloと定義されているからです。
ちなみに{name}というのはURLパラメータとなります。
じゃあ、そのURLとコントローラを結びつけるのはどれかというとdefaultsになります。
defautls定義に書いてある内容はというと、
_controllerというのは、コントローラを使う時に書く物です。
ここはこう書くもんだと覚えてください。(サービスを定義する時は違うんだけど。。。)
AppSmpleBundleというのは、バンドル作成時に
php app/console generate:bundle --namespace=App/SampleBundle --format=yml
とnamespaceにApp/SampleBundleに書きましたね。この事になります。
AppSampleBundleはフレームワーク側で管理される論理名になります。
詳しくは後ほど。
DefaultというのはDefaultControllerクラスのControllerを取った定義となります。
ちょっと話がそれますが、Contorollerクラスを作成する時は、
必ずXXXXControllerとControllerをprefixとしてつける必要があるのです。
これはルールです。
で、XXXX部分だけを定義します。
indexというのはindexAction関数の事になります。これもControllerと一緒で、
必ずXXXXActionとActionをprefixとしてつける必要があります。
この部分の事ね。
・・・・ class DefaultController extends Controller { public function indexAction($name) { ・・・・
このようにControllerクラスをルールに従って書く事で、
routing.ymlに書いた内容とマッチする事により指定したコントローラが呼び出されます。
ずらずらと書きましたがまとめて書くと、
コントローラを参照する場合、BUNDLE_NAME:CONTROLLER_NAME:ACTION_NAME という記法でアクションメソッドを指定します。
AppSampleBundle:Default:indexの場合、App\SampleBundle\Controller\DefaultControllerクラスのindexActionメソッドにマップされます。
ということになります。
じゃあ、なぜDefaultControllerクラスがAppSampleBundleと書くだけで参照可能かというと、
Symfony/app/AppKernel.php
の中身を開くと、
public function registerBundles() { $bundles = array( ・・・ new App\SampleBundle\AppSampleBundle(),
と定義されています。これはバンドル作成時に自動的に追加されます。
これでAppSampleBundleがSymfony2で管理されるようになり、参照可能となります。(厳密に言うとちょっと違うのですが。。。)
このControllerについてはrouting.ymlを使わなくてもアノテーションを使ってマッチングさせる事ができます。
SAStrutsの経験がある方なら、Actionを作成した時に書くあのやり方ですね。
次回はその説明をします。
(追記 2013/03/03)
ここまで書いて約3ヶ月もほったらかしにしてるけど、需要があれば続きを書くけどAnalyticsを見ても特になさそうだしどうしよう。。。