我使用symfony 1.4.8并且在尝试渲染隐藏的csrf表单字段时,没有将值添加到渲染字段。我之前没有问题就完成了这件事。请参阅以下示例,以查看代码和渲染输出。
代码:
<?php echo $form['_csrf_token']->render(); ?>
生成:
<input type="hidden" name="contact[_csrf_token]" id="contact__csrf_token" />
代码:
<?php echo $form['_csrf_token']->renderRow(); ?>
生成:
<tr>
<th><label for="contact__csrf_token"> csrf token</label></th>
<td><input type="hidden" name="contact[_csrf_token]" value="3cf960d4553e2649f86d0ccd12a26efe" id="contact__csrf_token" /></td>
</tr>
如您所见,第二种方法为csrf_token生成值,但它也会生成所有其他行信息。 render()
方法应该只生成带有值的'widget'(在本例中为隐藏的输入字段)。由于某种原因,它不会增加值。
答案 0 :(得分:1)
为什么需要显式渲染它?你为什么不使用$form->renderHiddenFields()
?
答案 1 :(得分:0)
改为使用$form->renderHiddenFields()
。
答案 2 :(得分:0)
你必须做一个硬刷新。你的会话中有些东西被卡住了。
硬刷新是Shift + F5
如果失败,请删除您域中的所有域Cookie,然后重试。
这只是一个会话问题,前提是你没有在其他地方搞过csrf。
答案 3 :(得分:0)
虽然在symfony中出现这种行为有很多不同的原因:
我提供了一个快速解决方案来直接打印CSRF令牌值:
<input type="hidden" name="signin[_csrf_token]" id="signin__csrf_token" value="<?php echo $form->getCSRFToken(); ?>" />
使用:
$form->getCSRFToken();
将呈现新生成的CSRF令牌。