【发布时间】:2016-10-07 07:05:10
【问题描述】:
我在表单验证方面有一点问题。 isValid() 方法总是返回 true。
这是我的代码:
public function ajaxAction(Request $request)
{
if ($request->isXMLHttpRequest()) {
$contact = new Contact;
$form = $this->createForm(ContactType::class, $contact);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
return new Response('Ok', 200);
}
}
ContactType 代码:
class ContactType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name')
->add('mail')
->add('message')
->add('save', SubmitType::class)
;
}
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'MyApp\MyBundle\Entity\Contact'
));
}
}
以及联系人实体:
use Symfony\Component\Validator\Constraints as Assert;
class Contact
{
/*
* @var string
*
* @Asserts\NotBlank("Vous devez écrire votre nom")
* @Assert\Length(
* min = 3,
* max = 70
* )
*/
protected $name;
/*
* @var string
*
* @Assert\NotBlank(message = "Ce champs ne doit pas être vide")
* @Assert\Email(
* checkMX = true,
* message = "Cet adresse email n'est pas valide"
* )
*/
protected $mail;
/*
* @var string
*
* @Assert\NotBlank( message = "Vous devez écrire un message")
* @Assert\Length(
* min = 10,
* max = 1000,
* minMessage = "Votre message doit comporter au moins {{ limit }} caractères",
* maxMessage = "Votre message ne doit pas dépasser {{ limit }} caractères"
* )
*/
protected $message;
即使我不遵循验证约束,ajaxAction 的代码也总是返回 200 Ok 响应。
你有解决这个问题的想法吗?
【问题讨论】:
-
你为什么会期待任何其他 http 代码?
-
@ybert 在你的控制器中添加一个 else 语句,看看会发生什么
if ($form->isSubmitted() && $form->isValid()) { return new Response('Ok', 200); } else { return $this->handleView($this-view(['form' => $form], Codes::HTTP_BAD_REQUEST));} -
@lolmx 是一样的。方法 isValid() 总是返回 true。
标签: forms validation entity symfony