2011年10月12日水曜日

独学Symfony2 : report4

version : BETA3 (正式リリース後, 改変の可能性あり)

今回は Controller について。

ここらへんからは, ドキュメントを読むよりもソースを実際に書いてやっていくほうが勉強になるだろうってことで、要所要所しか説明しない予定です(めんどうだし。。笑)


routing と コントローラー引数


ドキュメントと同じルーティング情報で説明する。

hello:
    pattern: /hello/{first_name}/{last_name}
    defaults: { _controller: AcmeHelloBundle:Hello:index, color: green }
というrouting 設定だとする。この場合, HelloControllerのindexActionが呼ばれるということは, もう明らかである。
そして, first_nameとlast_nameが引数に与えられることもわかる。この引数についてちょっと詳しく見てみる。

  • color:green の記述のために, $color 引数も与えられる。
    function ($first_name, $last_name, $color)
  • 引数の順番は関係ない!
    function ($first_name, $last_name, $color) でも, function ($last_name, $color, $first_name) でも同じこと
    逆に言えば, /hello/{first_name}/{last_name} とルーティングで設定したら, 変数は $first_name と $last_name になるってこと。
  • function ($first_name, $last_name, $color, $foo) のように, ドコにも定義していない $foo はダメ!
    ただ, デフォルト引数にして、function ($first_name, $last_name, $color, $foo = "foo") のようにすればOK
  • function ($first_name, $color) のように, 変数が無い($last_name)場合でも問題ない



コントローラーの一般タスク

RedirectingURLのリダイレクト
  1. return new RedirectResponse($this->generateUrl('hello'array('name' => 'Lucas')));  
※ generateUrlは router サービスの generateUrl のショートカット
Forwarding処理を他のコントローラーにデリゲートする
  1. $response = $this->forward('コントローラ指定'array(パラメータ));  
  2. return $response;  
これで, 指定したコントローラの 〇〇Action(パラメータ) が実行される。
※ これは httpKernel サービスの forward のショートカット
Rendering Templatesテンプレートのレンダリング
  1. $content = $this->renderView('テンプレート'array(渡すパラメータ));  
  2. return new Response($content);  
renderViewはtemplatingサービスのrenderメソッドのショートカット
これを簡単にかくと
  1. return $this->render('テンプレート'array(渡すパラメータ));  
で良い。
Accessing other Services他のサービスを利用
  1. $service = $this->get('サービス名');  
とすることで、他のサービスが使用可能。例として, request, response, templating, router, mailer がある。


requestサービス

requestサービスを使うと, セッションを扱ったり POST, GETの値を取得したりできる。
  1. $request = $this->get('request'); // サービス取得  
  2.   
  3. $session = $request->getSession(); // セッションオブジェクトの取得  
  4. // ちなみに, セッションオブジェクトの取得は, $session = $this->get('session'); でもよさげ。  
  5. $session->set('key','value'); // セッションに保存  
  6. $session->get('key'); // セッションから値取得  
  7.   
  8. $request->isXmlHttpRequest(); // Ajaxリクエストかどうか  
  9. $request->query->get('page'); // GETパラメータの取得  
  10. $request->request->get('page'); // POSTパラメータの取得  



まぁ、こんな感じでSymfonyの基礎の基礎を学びました。あとは実際に作成しながら、要所要所書いていく形にします。

0 コメント:

コメントを投稿

Share

Twitter Delicious Facebook Digg Stumbleupon Favorites More