我有一个Controller动作,它遍历一个实体数组并创建一个Form for 每个,然后在Twig模板中呈现它们,如下所示:
public function siteTestAction() {
$api = $this->get('product_model');
$result = $api->findProductByCode("2000082");
$array_forms = Array();
foreach ($result as $prod)
{
$form = $this->createForm('pos_product', $prod, array('action' => $this->generateUrl('receive_form')));
$array_forms[] = $form->createView();
}
return $this->render('AEBikePOSSyncBundle:Default:array_form.html.twig', array(
'data' => $array_forms,
));
}
加载此错误会导致错误“无法启动会话,因为标题已经由第7行的”“发送。”
这个控制器动作重写了一个完美的不同动作。我尝试消除它们之间的差异,但有很多,例如新的使用Guzzle来使用API。几乎所有的差异都在findProductsByCode()方法的后面,它只返回一个实体数组。
堆栈跟踪中的最后三项是:
所以我开始看作csrf_protection。一旦我在FormType类中禁用csrf_protection,错误就会消失,一切正常。
原始工作操作使用csrf_protection,我可以通过查看表单来源并查看令牌字段来验证。
那么,为什么csrf_protection会在一个操作中导致此错误而不是另一个操作,使用相同的FormType?
**编辑:我在两条路线之间消除了尽可能多的差异,我唯一不能消除的是使用Guzzle下载API而另一个使用cURL。我想我将不得不通过Guzzle文件查看额外的空格或错误的编码?
** EDIT2: 好吧,我把它缩小了,找到了罪魁祸首,但我不知道该怎么办。我使用Guzzle来使用API,而我的Guzzle类有一个Listener,它会在每次发送请求时设置一些状态变量。这段代码在我的Guzzle类构造函数中:
$this->getEventDispatcher()->addListener('request.complete', function(Event $event) {
$this->status_code = (int) $event['response']->getStatusCode();
$this->reason_phrase = $event['response']->getReasonPhrase();;
$this->url = $event['request']->getUrl();
});
如果删除该块,一切正常。 所以现在问题是,为什么?我当然想保留这个听众。
答案 0 :(得分:0)
呃,我发现了一个错误的同花顺();我的代码深处的陈述。绝对没有找到那个。这个上有很多红鲱鱼......