【问题标题】:Is there a way to force a form bind in Symfony2?有没有办法在 Symfony2 中强制表单绑定?
【发布时间】:2016-01-13 15:45:51
【问题描述】:

我有一个表单类型

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”或类似的东西。

我怎样才能实现它?

【问题讨论】:

    标签: symfony symfony2-forms


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,它成功了。你知道这个方法是否可以用于包含file字段的表单吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-17
    • 2013-02-07
    • 1970-01-01
    • 2021-08-07
    • 2014-01-02
    • 2017-12-01
    • 1970-01-01
    相关资源
    最近更新 更多