我在使用{% form_errors(form) %}
显示表单错误时出现问题。 显示的消息错误,字段已反转。不知道这是一个错误还是我的错误。
无论如何,这是我的控制器操作的一部分,我正在创建一个未绑定到任何对象或实体的新表单类型:
class MyController extends Controller
{
public function newAction(Request $request)
{
// NOTE not passing any data to createForm method
$context = $this->get('security.context');
$form = $this->createForm(new SendMailType($context));
if('GET' == $request->getMethod()) // GET
return array('form' => $form->createView());
$form->bindRequest($request); // POST
if(!$form->isValid()) return array('form' => $form->createView());
return new Response('Form is valid');
}
}
SendMailType
有两个字段,recipient
和text
。 recipient
不能为空。
class SendMailType extends AbstractType
{
/**
* @var Symfony\Component\Security\Core\SecurityContext
*/
protected $context;
public function __construct(SecurityContext $context)
{
$this->context = $context;
}
public function buildForm(FormBuilder $builder, array $options)
{
$builder
->add('recipient', 'text')
->add('text', 'textarea');
}
public function getDefaultOptions(array $options)
{
return array(
'validation_constraint' => new Collection(array(
'recipient' => array(new NotBlank()),
))
);
}
public function getName() { return 'send_mail'; }
}
使用{% form_errors(form) %}
在发布时出现错误:
字段“text”无效。
正如您所见这是完全错误的,因为字段text
没有指定验证规则。另一方面,recipient
字段本身显示正确的错误:
此值不应为空白。
答案 0 :(得分:1)
有点惊讶它完全奏效了。无论如何,这将解决问题:
public function getDefaultOptions(array $options)
{
return array(
'validation_constraint' => new Collection(array(
'allowExtraFields' => true,
'fields' => array('recipient' => array(new NotBlank())),
))
);
}