有没有办法强制在Symfony2中进行表单绑定?

时间:2016-01-13 15:45:52

标签: symfony symfony2-forms

我有一个表单类型

class LoginFacebookType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('access_token', 'text', array("constraints" => array(
                new Assert\NotBlank(),
                new Assert\Length(array("max" => 512))                        
            )))
            ->add('save', 'submit');
    }

    public function getName()
    {
        return 'facebook_login';
    }
}

然后,我在控制器上使用它:

$facebookLoginForm = $this->createForm(new LoginFacebookType());
$facebookLoginForm->handleRequest($request);
if($facebookLoginForm->isValid())
{
    //do something
}
else
{
    //Debug form errors
    print_r($facebookLoginForm->getErrorsAsString()); die();
}

我的问题是:如果我使用一个名为" facebook_login [access_token]"我得到控制器上的所有错误,比如一个非常大的访问令牌,或者没有传递csrf_token(这没关系)。但是,如果我发出没有任何参数的请求,我得到isValid = false,但错误列表为空。

我想要一个" access_token字段是必需的"和"无效的csrf_token"或类似的东西。

我怎样才能实现它?

1 个答案:

答案 0 :(得分:2)

这是因为如果POST数据中没有“facebook_login”键,则根本不会提交表单。您可以强制它使用以下内容提交替换$facebookLoginForm->handleRequest($request);

$facebookLoginForm->submit($request->request->get('facebook_login', []));