有没有办法在 Symfony2 中强制绑定表单?
Is there a way to force a form bind in Symfony2?
我有一个表格类型
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 field is required" 和 "invalid csrf_token" 或类似的东西。
如何实现?
那是因为如果POST数据中没有"facebook_login"键,根本不会提交表单。您可以强制它提交替换 $facebookLoginForm->handleRequest($request);
为:
$facebookLoginForm->submit($request->request->get('facebook_login', []));
我有一个表格类型
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 field is required" 和 "invalid csrf_token" 或类似的东西。
如何实现?
那是因为如果POST数据中没有"facebook_login"键,根本不会提交表单。您可以强制它提交替换 $facebookLoginForm->handleRequest($request);
为:
$facebookLoginForm->submit($request->request->get('facebook_login', []));