version : BETA3 (正式リリース後, 改変の可能性あり)
今回は Controller について。
ここらへんからは, ドキュメントを読むよりもソースを実際に書いてやっていくほうが勉強になるだろうってことで、要所要所しか説明しない予定です(めんどうだし。。笑)
routing と コントローラー引数
ドキュメントと同じルーティング情報で説明する。
hello:
pattern: /hello/{first_name}/{last_name}
defaults: { _controller: AcmeHelloBundle:Hello:index, color: green }
というrouting 設定だとする。この場合, HelloControllerのindexActionが呼ばれるということは, もう明らかである。pattern: /hello/{first_name}/{last_name}
defaults: { _controller: AcmeHelloBundle:Hello:index, color: green }
そして, 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)場合でも問題ない
コントローラーの一般タスク
Redirecting | URLのリダイレクト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 コメント:
コメントを投稿