【问题标题】:the form is always valid in symfony2表单在 symfony2 中始终有效
【发布时间】:2014-10-29 19:24:41
【问题描述】:

我有一个带有此验证的表单:

# ITW/UserBundle/Resources/config/validation.yml

ITW\UserBundle\Entity\User:
    properties:
        name:
            - NotBlank: ~
            - Length: { min: 800 }

我正在检查这样的表格:

// ITW/UserBundle/Controller/UserController.php

    $entity = new User();
    $form = $this->createForm(new UserType(), $entity);

    $form->handleRequest($request);

    if ($form->isValid()) {
        echo "valid!";
    }

config.yml 中验证是:

validation:      { enabled: true }

但是,当我提交带有空 name 字段的表单时,$form->isValid() 总是返回 True !!!

我不知道出了什么问题!
我确定validation.yml 正在正确加载(因为当我使用无效的字段名称时,symfony 会给出异常)

问题出在哪里?


Symfony 版本是2.5.6,我也试过2.5.5
我还尝试了getters 字段name 的约束目标并得到了相同的结果。


我的UserType 是:

namespace ITW\UserBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use ITW\UserBundle\Entity\User;

class UserType extends AbstractType
{
    public function __construct(){}

    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
        ->add('name','text',array('required'  => true,'label'=>'name'))
        ->add('family','text',array('required'  => true,'label'=>'family'))
        ->add('tels','collection', array('required'  => false,'prototype'=>true,'type'=> 'text','allow_add'=>true,'delete_empty'=>true,'label'=>'Tel'))
        ->add('username','text',array('required'  => true,'label'=>'username'))
        ->add('password','password',array('required'  => true,'label'=>'password'));

    }

    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'ITW\UserBundle\Entity\User'
        ));
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'itw_userbundle_user';
    }
}

【问题讨论】:

  • Symfony2 doc,你有这个吗? validation: { enable_annotations: true } 在您的 app/config/config.yml 的框架部分中?
  • @AlexandreL。不,因为我没有使用 annotations 我正在使用 validation.yml ;无论如何,我也用annotations 进行了测试,它也失败了;请检查我的问题的最后 3 行
  • @Chausser:版本 2.5.6
  • 你试过 Validator ($validator = $this->get('validator');) 吗?

标签: php validation symfony symfony-forms


【解决方案1】:

为澄清起见,如果您尚未从 config.yml 文件中删除部分 form,则配置 validationenabled by default

framework:
    form: ~

【讨论】:

  • 在@Chausser 的帮助下解决了问题;聊天链接在 cmets 的末尾;更改错误主题的空白控制解决了它! (为什么?!)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-28
  • 1970-01-01
  • 1970-01-01
  • 2014-01-28
  • 2021-12-06
  • 2018-04-01
  • 2023-03-30
相关资源
最近更新 更多