【问题标题】:Custom single form field type ignores validation in Symfony 2?自定义单表单字段类型忽略 Symfony 2 中的验证?
【发布时间】:2012-07-30 22:55:11
【问题描述】:

我有一个继承自 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',
            ))
        ;
    }
}

【问题讨论】:

  • 您使用的是哪个版本的 Sf2?
  • @Maerlyn 2.0.17-DEV,如工具栏所说。

标签: symfony symfony-forms


【解决方案1】:

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

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

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

【讨论】:

  • 很遗憾知道这一点。仍然无法迁移到 2.1(至少如果它仍然是测试版)。无论如何,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-16
相关资源
最近更新 更多