スポンサーサイト

0

    一定期間更新がないため広告を表示しています


    • 2014.12.23 Tuesday
    • -
    • -
    • -
    • -
    • -
    • by スポンサードリンク

    Symfony2のControllerで@Templateを使うメリット

    0
      仕事が忙しくて予定してた実験ができなかったので小ネタ。

      symfony1.xに馴れた身でSymfony2を触ると、色々面倒なことってありますよね。
      例えば、sfDoctrineRoute。例えば、テンプレート名とアクション名が同じならわざわざ指定しなくていい。

      明示的で後から参加する人にもわかりやすくなったのは良いんですが、裏を返せばエキスパートにとってはわかりにくくなったと思うんです。(言いすぎ)

      symfony1.xの便利機能が恋しい〜。
      ところで、それ、Sensio¥Bundle¥FramewordExtraBundleにほとんどあります。

      Sensio¥Bundle¥FrameworkExtraBundle¥Configuration¥ParamConverter

      sfDoctrineRouteみたいなもんです。
      コントローラのアクションのメソッドにアノテーションにして使います。
      使い方はこの辺り
      一々$this->getDoctrine()->getManager()とかめんどくさくてやってられないでしょ。

      Sensio¥Bundle¥FrameworkExtraBundle¥Configuration¥Template

      通常$this->render()なんかで指定するテンプレート名が指定不要になって、更に、アクションのメソッドが配列を返すだけで良くなる設定。
      これをつけておくだけでAcmeDemoBundle:Foo:barコントローラのテンプレートはAcme/DemoBundle/Resources/views/Foo/bar.html.twigになります。
      @Template("AcmeDemoBundle:Foo:baz.html.twig")と書けばAcme/DemoBundle/Resources/views/Foo/baz.html.twigにも変更可。

      で。ここから、特に@Templateを使うと何が良いのかという話。

      @Templateをつけない場合、コントローラのメソッドの返り値はSymfony¥Component¥HttpFoundation¥Responseになります。
      普通のコントローラ作ってるだけなら別にいいのですが、汎用的なコントローラを作って、それを拡張した新しいコントローラを作ろうとした場合に拡張元が普通のアクションだとメソッドの返り値がResponseになってしまい、非常にカスタマイズしにくいです。

      @Templateなしの場合
      // src/Acme/DemoBundle/Controller/BaseController.php
          public function barAction(Request $request)
          {
              //何かの処理
      
              return $this->render('AcmeDemoBundle:Foo:bar.html.twig', 
                  array('name' => $name)
              );
          }
      // src/Acme/DemoBundle/Controller/FooController.php
          public function barAction(Request $request)
          {
              //parent::barAction($request)だとResponseが返って来ちゃうから…
              //何かの処理(BaseController::barAction()と同じ内容コピペ)
              //追加の処理(カスタマイズ)
      
              return $this->render('AcmeDemoBundle:Foo:bar.html.twig', 
                  array('name' => $name, 'tel' => $tel)
              );
          }
      

      @Templateありの場合
      // src/Acme/DemoBundle/Controller/BaseController.php
          /**
           * @Template()
           */
          public function barAction(Request $request)
          {
              //何かの処理
      
              return array('name' => $name);
          }
      // src/Acme/DemoBundle/Controller/FooController.php
          /**
           * @Template()
           */
          public function barAction(Request $request)
          {
              //返ってくるのは配列だからparent::barAction()使ってOK
              $vars = parent::barAction($request);
              //追加の処理(カスタマイズ)
              $vars['tel'] = $tel;
      
              return $vars;
          }
      

      テンプレート指定の面倒がなくなるだけじゃないよ!という話でした。


      スポンサーサイト

      0

        • 2014.12.23 Tuesday
        • -
        • 14:54
        • -
        • -
        • -
        • -
        • by スポンサードリンク

        コメント
        コメントする








           

        PR

        calendar

        S M T W T F S
              1
        2345678
        9101112131415
        16171819202122
        23242526272829
        3031     
        << July 2017 >>

        twitter

        selected entries

        categories

        archives

        recent comment

        • 結局CodeIgniter用汎用Modelクラス&汎用CRUDスクリプトを書きました
          プログラマー
        • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
          よし
        • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
          ななうぇぶ
        • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
          よし
        • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
          よし
        • WindowsのPCで開発するphperがxhprofを使う方法
          ななうぇぶ
        • WindowsのPCで開発するphperがxhprofを使う方法
          川本
        • [バッドノウハウ]Symfony2で別テーブルの集計項目を一覧に含めたいとき
          よし
        • Symfony Advent Calendar JP 2012 day 14 - vendorをcomposerで管理しているプロジェクトにcomposerを使わずにバンドルを追加したときのautoloadの書き方
          77web
        • Symfony Advent Calendar JP 2012 day 14 - vendorをcomposerで管理しているプロジェクトにcomposerを使わずにバンドルを追加したときのautoloadの書き方
          ktz

        recent trackback

        • HTMLの表(TABLE)のセル(TD)に斜線を引くjavascriptライブラリ slash.js 作っちゃいました
          常山日記
        • django対symfony 日本語メール送信(その1 symfony編)
          CPA-LABテクニカル
        • CodeIgniterでユーザー認証
          されどLAMPな日々
        • 久々にdjangoを最新版にしたらHTMLがエスケープされちゃった!!(解決済み)
          常山日記
        • FastCGIを諦めてmod_pythonを使う。Apacheのアップグレード
          サーバー用語集
        • さくらインターネット、sqlite3でdjango@CGI版を使う際の設定メモ
          常山日記
        • さくらインターネット スタンダードプランでdjango使ってる方、DBは?
          mitszoの日記
        • python多次元リストをsort(並べ替え)する方法?
          mitszoの日記
        • フォームから送信した値とrequest.POSTの挙動($_POST@PHPとの比較)
          Humming Via Kitchen
        • 日本語テキストをtruncate@django(Python全般にも??)
          常山日記

        recommend

        links

        profile

        search this site.

        others

        mobile

        qrcode

        powered

        無料ブログ作成サービス JUGEM