【发布时间】:2012-08-05 23:35:45
【问题描述】:
我正在使用 Symfony 1.4 表单作为一个简单的登录模块。该表单非常基本,其代码如下所示:
<?php
class LoginForm extends sfFormSymfony
{
public function configure()
{
$this->setWidgets(
array('username' => new sfWidgetFormInputText(),
'password' => new sfWidgetFormInputPassword(),));
// 'remember_me' => new sfWidgetFormSelectCheckbox(array('choices'=>array('true'=>''))),));
$this->widgetSchema->setNameFormat('login[%s]');
$this->setValidators(array(
'username' => new sfValidatorString(array('required'=>true)),
'password' => new sfValidatorString(array('required'=>true)),
));
}
}
表单按预期在模板页面中呈现良好。仅供参考,我使用 $form['username']->render 方法来单独渲染我喜欢的方法,而不是回显表单。
在发布(已识别)后,我将值绑定到如下形式:
$this->form->bind($request->getParameter('login'));
但是,它不符合条件
$this->form->isValid();
这两个字段都没有留空并且凭据正确,所以这对我来说似乎更阴险。
在执行 var_dump($this->form->getValues());它返回一个空数组,我认为这意味着这些值没有被检索或绑定。
谁能发现我可能搞砸的地方?
谢谢
【问题讨论】:
-
如果你转储
$request->getParameter('login'),你会得到预期值吗? -
是的,就这么做了,它转储了应有的用户名和密码值
-
您是否也获得了 csrf 令牌?
-
不,没有转储 csrf 令牌
-
这就是您的表单无效的原因(如果您启用了 csrf 保护)。确保通过模板中的
$form->renderHiddenFields()或$form["_csrf_token"]->render()呈现字段。
标签: symfony1 symfony-1.4 symfony-forms