2011年12月8日木曜日

Symfony2を試してみて[一人Web系AC2011]

連続でお送りする、PHPの有名FWお試し&比較記事シリーズです。
今日は、Symfony2についてです。

まずは、これまでと同じ仕様のサンプルを作成しました。
「同じ仕様って、どんな仕様なんじゃい?」
と言う方は、こちらの記事をどうぞ。最初のほうに書いてあります。

内容的にですが、Symfony2もblogチュートリアルがあるので、そちらを参考に一部手を加えました。
ページャ追加したり、formをせっかくだからクラスで作ってみたり、ですね。

そのソースが、こち…ら…。
すんませんまた上げ忘れて手元にありません何やって(ry
後日上げなおします。

■大体の流れ
前回と同様、Symfony2を読むための流れです。
  1. app/config/routing.ymlから、利用するバンドルを調べる
    今回のサンプルの場合、以下のような形になっています。
    sample:
        resource: "@MySampleBundle/Resources/config/routing.yml"
        prefix:   /sample
    resourceが挿す先は、バンドルのrouting設定ファイルです。
  2. バンドルのrouting.ymlを見て、コントローラと対応するメソッドを調べる。
    バンドル自体はsrcディレクトリの先にあります。
    今回の場合、パスは以下になります。
    src/My/SampleBundle/Resources/config/routing.yml
    patternにURIのパターンと、そのパターンでリクエストが来た場合に呼び出される内容がdefaultsに記載されています。
    sample_index:
        pattern: /
        defaults: { _controller: MySampleBundle:Default:index }
    この場合、MySampleBundleのDefaultControllerのindexAction()が呼ばれる事になります。
    {}で囲まれたものがある場合、それはアクションの引数になります。
  3. 対応するコントローラの処理を読む
    この辺の内容は、基本的なPHPです。
    MVCでいうMにあたる、DB操作についてはdoctrineを利用します。
    "MySampleBundle:Data"の場合、接続先DBの"Data"テーブルを読むと言う事さえ判れば、なんとなく読めると思います。
    ビューについては、$this->render()にて指定しています。
    最初の引数がテンプレート、次の引数がテンプレートに引き渡す値の配列ですね。
  4. テンプレートを読む
    テンプレートは[バンドルルート]/Resources/viewsにあります。
    コントローラ上で
    'MySampleBundle:Default:index.html.twig'
    として呼び出されていた場合、テンプレートのパスは以下になります。
    src/My/SampleBundle/Resources/views/Default/index.html.twig
    Symfonyの場合、テンプレートはTwigと言う物を使っています。
    書式的に難しい物では無いので、見れば大体は判ると思います。
    Twigは継承タイプのテンプレートなので、{% extends %}により他のテンプレートを継承している場合、まずそちらの内容が読み込まれます。
■実装しての感想
  • JavaのStruts/SpringFrameworkの組み合わせを思い出した。
    書式自体はぜんぜん違うけど、この、設定ファイルありきの書き方は、本当にソレっぽいなと思います。
    設定ファイルの書式自体は簡単なので、Springほど設定ファイルがゴミゴミすることもありませんが…。
  • 癖が強い。
    慣れの問題もあるかとは思うのですが、中々に癖が強いように感じられました。
    doctrineやTwig等、他のFW利用時にはあまり使わないものが多くあるからかもしれません。
  • Pagerにあたる機能はコアに無い。
    らしいです。
    今回は、本当に簡単なページャだったので、直接一覧ページのコードに埋め込む形で実装してしまいました。
    実際にサイトを実装する場合は、使い回しが出来るよう、独自バンドルを作ったりするんじゃないかと思います。
今日はここまで。
次回はCodeIgniterで実装してみようと思います。

1 件のコメント: