自定义单一表单字段类型忽略Symfony 2中的验证?

时间:2012-07-30 22:55:11

标签: symfony symfony-forms

我有一个可重用(此处简化)的自定义字段类型,它继承自textarea类型。默认情况下,内容不能为空,因此我将validation_constraint指定为默认选项:

namespace Acme\HelloBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Validator\Constraints\NotBlank;

class SmsContentType extends AbstractType
{

    public function getDefaultOptions(array $options)
    {
        return $options + array(
            'label'                 => 'Testo *',
            'validation_constraint' => new NotBlank()
        );
    }

    public function getParent(array $options) { return 'textarea'; }

    public function getName() { return 'sms_content'; }

}

但是将内容留空不会显示任何错误。不靠近字段本身而不是使用form_errors(form)的冒泡错误。

我哪里错了?哦,我在另一种形式中使用这种自定义类型:

class UserType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
            ->add('sms_birthday_template', new SmsContentType(), array(
                'label' => 'SMS compleanno',
            ))
        ;
    }
}

1 个答案:

答案 0 :(得分:3)

这是Symfony 2.0的限制。 “validation_constraint”选项仅适用于根表单。

在Symfony 2.1中,“validation_constraint”被重命名为“constraints”并完全符合您的要求:

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'label'       => 'Testo *',
        'constraints' => new NotBlank()
    ));
}