Forms 条令约束:自定义验证器也是用JavaScript实现的吗?

Forms 条令约束:自定义验证器也是用JavaScript实现的吗?,forms,symfony,validation,Forms,Symfony,Validation,我在文件src/HQF/Bundle/PizzasBundle/Form/Type/VilleType.php 它真的很短: <?php namespace HQF\Bundle\PizzasBundle\Form\Type; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; class VilleType extends AbstractType {

我在文件
src/HQF/Bundle/PizzasBundle/Form/Type/VilleType.php

它真的很短:

<?php

namespace HQF\Bundle\PizzasBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;

class VilleType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {   
        $builder->add('cp', 'text', array('max_length' => 5));
    }
    public function getDefaultOptions(array $options)
    {   
        return array(
            'data_class' => 'HQF\Bundle\PizzasBundle\Entity\Ville',
        );
    }
    public function getName()
    {   
        return 'ville';
    }
}

这只是一个简单的Regexp。在表单中,我说
array('max_length'=>5)
然后在客户端添加了一些JavaScript验证。这很好。是否有一种方法可以添加自定义验证器,以便它们也添加到客户端。我猜类似于
array('max_length'=>5,'FrenchPostalCode')
之类的东西?

Symfony2中没有内置的JavaScript验证。您所说的是浏览器直接支持的,不涉及JavaScript

您可以尝试使用以下方法来实现所需的验证。如果它不能解决问题,你就必须使用JavaScript

<?php

namespace HQF\Bundle\PizzasBundle\Validator\Constraints;

use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;

class FrenchPostalCodeValidator extends ConstraintValidator
{
    public function validate($value, Constraint $constraint)
    {   
        if (!preg_match('/^([0-9]{5}|2[A|B])$/', $value, $matches)) {
            $this->context->addViolation(
                $constraint->message,
                array('%string%' => $value)
            );  
        }   
    }   
}