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


requestサービス

requestサービスを使うと, セッションを扱ったり POST, GETの値を取得したりできる。
$request = $this->get('request'); // サービス取得

$session = $request->getSession(); // セッションオブジェクトの取得
// ちなみに, セッションオブジェクトの取得は, $session = $this->get('session'); でもよさげ。
$session->set('key','value'); // セッションに保存
$session->get('key'); // セッションから値取得

$request->isXmlHttpRequest(); // Ajaxリクエストかどうか
$request->query->get('page'); // GETパラメータの取得
$request->request->get('page'); // POSTパラメータの取得



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

0 コメント:

コメントを投稿

Share

Twitter Delicious Facebook Digg Stumbleupon Favorites More