2011-10-27 10 views
5

Symfony2のクッキーを扱ういくつかの質問とページがありますが、これがどのように動作するのかについての明確なコンセンサスはないようです。もちろん、PHPのネイティブsetcookie関数を使用することに戻すことはできますが、Symfony2でもやりやすいはずです。Symfony2のビューにクッキーを添付する

私のコントローラには、クッキーが添付されたビューを返すアクションがあります。これまでのところ、私は基本的にこのような例は思えてきた:

use Symfony\Compentnt\HttpFoundation\Response; 

public function indexAction() { 
    $response = new Response(); 
    $response->headers->setCookie(new Cookie('name', 'value', 0, '/'); 
    $response->send(); 
} 

これに伴う問題は、それが応答を送信...とビューをレンダリングしないということです。ヘッダーを送信せずにクッキーを設定すると、ビューが表示されますが、ヘッダー(Cookie)は送信されません。

public function indexAction() { 
    ... 
    $response->sendHeaders(); 
    return array('variables' => 'values'); 
} 

しかし、これは実際に使用すると予想パターンです:私は今、手動で返す前に自分の行動であることを呼び出すことだし、それが動作しているようですので、私の周り突っつい

はResponseオブジェクトでsendHeaders()方法を見つけました?以前のバージョンのsymfonyでは、私のコントローラにヘッダをセットして、View Controllerが自分が送信したものを送信することを期待していました。今すぐ手動で送信して動作させる必要があります。つまり、これを私がヘッダーを設定した動作から呼び出さなければならないということです。これが当てはまるのか、それとも間違っているのか誰もドキュメントの中でそれを言いたいことさえ気にしていませんでしたか?

私はあなたと右のラインにいると思う

答えて

18

Symfony2 Templating Service

をあなたが見れば:あなたがここにドキュメントをチェックアウトした後、テンプレートをレンダリングしようとしている場合

$response->headers->setCookie(new Cookie('name', 'value', 0, '/')); 

次の行に表示されます。

return $this->render('AcmeArticleBundle:Article:index.html.twig'); 

基本的にレンダリング方法は、 sponse(コントローラは、その後返す)あなたがしなければならないすべては、この切片で、小枝のテンプレートの内容を持っている:私はとにかくそれだと思う

$response = $this->render('AcmeArticleBundle:Article:index.html.twig'); 
$response->headers->setCookie(new Cookie('name', 'value', 0, '/')); 
return $response; 

...

+0

はまだ私のベアリングを取得しようとしていますSymfony2と一緒に。 Zendフレームワークで同様のコードを使用しました。コントローラ内からテンプレートを明示的に呼び出しています。私はちょうどなぜデフォルトではビューが呼び出されているのか混乱していると思いますが、私がレスポンスを変更しようとするとそうではありません。ありがとう! –

+1

アクションで注釈「テンプレート」を使用していますか?そうであれば、その注釈の空のバージョンは、アクションと同じ名前のテンプレートをレンダリングします。手動で別のレスポンスを返すと、 'Template'アノテーションを上書きするかもしれないと思っています。その場合、ビューの内容は取得されません。私はこれがまさに正しいかどうかはわかりませんが、if(!($ controllerReturn instaceof Response)){//レンダーテンプレート} else {return $ controllerReturn;}を実行するラッパーのような注釈を想像してください。 } '。 – Kasheen

+0

私の最後の説明に従うためには、特に 'onKernelView'メソッドの' Sensio \ Bundle \ FrameworkExtraBundle \ EventListener \ TemplateListener'をチェックすると、コントローラの戻り値( '$ parameters')がどのように生成され、テンプレートを作成するか、直接それらを返します。しかし、それはあまりにも多くのことを物事に掘り下げている、私はあなたが説明をしたいと思ったので、それだけを投稿し、時々それらは厄介なかゆみのようです。 – Kasheen

関連する問題