Symfony $ form-> isValid返回true

时间:2016-10-07 07:05:11

标签: forms validation entity symfony

我在表单验证方面遇到了问题。 方法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响应。

你有想法解决这个问题吗?

3 个答案:

答案 0 :(得分:2)

您的实体类中的注释中存在一些错误。

  1. @Asserts \ NotBlank(“Vousdevezécrirevotrenom”)需要一条消息值 如果使用 Constraints as Assert
  2. ,则不会断言
  3. 主要是注释以/ **开头而不是/ *
  4. 使用此:

    /**
     * @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 }

考虑到您正在使用注释方法来指定约束,您需要显式启用注释: