【发布时间】: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