我在表单验证方面遇到了问题。 方法isValid()始终返回true。
这是我的代码:
Button button = (Button)findViewById(R.id.btn_id);
button.setOnClickListner(this);
ContactType代码:
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);
}
}
联系实体:
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'
));
}
}
即使我没有遵循我的验证限制,ajaxAction的代码也会返回200 Ok响应。
你有想法解决这个问题吗?
答案 0 :(得分:2)
您的实体类中的注释中存在一些错误。
使用此:
/**
* @var string
*
* @Assert\NotBlank(message = "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;
答案 1 :(得分:0)
尝试此操作以检索通过常规表单验证的任何错误:
if ($form->isValid() && $form->isSubmitted()) {
/** @var FormErrorIterator $errors */
$errors = $form->getErrors(true);
/** @var FormError $error */
while ($error = $errors->current()) {
$this->addFlash('error', $error->getMessage());
$errors->next();
}
}
答案 2 :(得分:0)
您是否在配置中明确启用了注释?
# app/config/config.yml
framework:
validation: { enable_annotations: true }
考虑到您正在使用注释方法来指定约束,您需要显式启用注释: