我發現了幾個在Symfony2中處理cookie的問題和頁面,但似乎沒有任何明確的共識來說明這應該如何工作。當然,我可以回到使用PHP的本地功能setcookie
,但我覺得這對Symfony2也應該是一件容易的事情。將Cookie附加到Symfony2中的視圖
我在我的控制器中有一個動作,我只是想用附加的cookie返回一個視圖。到目前爲止,我看起來基本上是這樣的例子:
use Symfony\Compentnt\HttpFoundation\Response;
public function indexAction() {
$response = new Response();
$response->headers->setCookie(new Cookie('name', 'value', 0, '/');
$response->send();
}
這個問題是,它發送響應...並且不呈現視圖。如果我在不發送標題的情況下設置cookie,則會呈現視圖,但不會發送標頭(cookie)。
閒逛我發現sendHeaders()
方法Response對象,所以我現在手動調用,在我回國的行動之前,似乎工作:
public function indexAction() {
...
$response->sendHeaders();
return array('variables' => 'values');
}
但這真的預期的模式使用?在以前的symfony版本中,我可以在控制器中設置標題,並期望視圖控制器處理髮送的任何內容。現在看來,我必須手動將它們從動作中發送出去才能使其正常工作,這意味着我必須從任何設置標題的動作中調用該動作。是這種情況還是存在某些我錯過的東西,這很明顯在任何文檔中甚至沒有人提及它?
仍在試圖讓我的軸承與Symfony2。我用Zend框架使用類似的代碼,明確地從控制器中調用模板。我想我只是困惑,爲什麼在默認情況下視圖被稱爲,但如果我嘗試修改響應它不是。謝謝! –
您是否在Action上使用註釋'Template'?如果是這樣,則該註釋的空白版本將呈現與該動作具有相同名稱的模板。如果您手動返回另一個響應,我認爲它可能會覆蓋'Template'註釋,在這種情況下,您將無法看到視圖內容。我不確定這是否完全正確,但想象一下像if(!($ controllerReturn instaceof Response)){// render template} else {return $ controllerReturn; }'。 – Kasheen
爲了跟上我的最後一個解釋,你可以查看'Sensio \ Bundle \ FrameworkExtraBundle \ EventListener \ TemplateListener',特別是'onKernelView'方法,你可以看到它是如何控制器的返回('$ parameters')並使用它們來生成一個模板或直接返回它們。儘管這些東西有點過分,但我只是把它發佈,因爲你似乎想要一個解釋,有時候這些就像是一個惱人的癢;)。 – Kasheen