我的symfony项目中有这样的表格,请注意相关字段不是映射的字段:
<?php
namespace MyApp\MyBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
// validators and constraints
use Symfony\Component\Validator\Constraints\Length;
class ArtistWithConstraintType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$artist = $options['data'];
$builder
->add('professional', 'choice', array(
'expanded' => true,
'multiple' => false,
'choices' => array(false => 'You are a self-educated', true => 'You are a professional'),
'required' => true,
))
;
if ($artist && $artist->getProfessional()) {
$builder->add('artistNumber', 'text', array(
'constraints' => array(
new Length(array(
'max' => 14,
'min' => 14))),
'required' => true,
))
;
} else {
$artist->setArtistNumber(null);
$builder->remove('artistNumber')
;
}
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'MyApp\MyBundle\Entity\Artist',
'csrf_protection' => true,
'csrf_field_name' => '_token_artist',
// a unique key to help generate the secret token
'intention' => 'artist_item',
));
}
/**
* @return string
*/
public function getName()
{
return 'app_artist';
}
}
事实上,在这种形式下,我问艺术家是否是专业人士。如果没有,则无需采取任何措施如果为true,则通过ajax方法显示名为artistNumber
的字段。
目前,一切运作良好。除验证约束外:
'constraints' => array(
new Length(array(
'max' => 14,
'min' => 14))),
实际上,artistNumber字段必须是一个只有14个字符的字符串,不多也不少。但是当我验证表单时,不会考虑此验证约束。
我在视图中显示表单没有问题,ajax没问题或者没有问题来恢复artistNumber
字段中的用户条目。但是,如果用户输入长度小于或大于14个字符的字符串,则验证也不起作用,即使用户输入少于或超过14个字符,我也会在用户输入后恢复。
我在哪里错了?
答案 0 :(得分:0)
在添加约束之前有条件。检查条件是否
$artist && $artist->getProfessional()
当你正在使用时,是正确的