Symfony2 - 集合上的回调验证器

时间:2014-04-23 15:45:19

标签: symfony validation

在symfony2中,我想使用回调来验证我的表单,但是从不调用此回调。其中回调的类通过集合在主表单中调用。

这是我的代码......

主要课程:

class InscriptionType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('inscriptionReponses','collection',array('label'=>false,
                                                           'type'=>new InscriptionReponseType(),
                                                           'error_bubbling'=>false,
                                                           'by_reference'=>false))
        ;
    }
}

InscriptionReponse类:

use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\ExecutionContextInterface;

/**
 * InscriptionReponse
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Ptolemee\ColloqueBundle\Entity\InscriptionReponseRepository")
 * @Assert\Callback(methods={"formValidation"})
 */

class InscriptionReponse
{

    /* ... some code ... */

    public function formValidation(ExecutionContextInterface $context)
    {   
        die('not dying ?');
    }    

}

我不明白什么是错的......任何帮助都会受到高度赞赏。 tahnks。

尼古拉斯。

2 个答案:

答案 0 :(得分:1)

将@Assert \ Valid添加到包含实体中的集合时,将调用该集合的回调函数。

假设Inscription有一系列InscriptionResponses:

class Inscription
{
    /**
    * @Assert\Valid()
    */
    private $inscriptionResponses;
}

class InscriptionResponse
{
    /**
    * @Assert\Callback
    */
    public function formValidation(ExecutionContextInterface $context)
    {   
        die('dying');
    }  
}

无论error_bubbling选项的值如何,这都有效。

答案 1 :(得分:0)

基于文档中的内容:

http://symfony.com/doc/current/reference/constraints/Callback.html

而不是

/**
* @Assert\Callback(methods={"formValidation"})
 */

class InscriptionReponse
{

你应该将注释移到函数本身上面

class InscriptionReponse
{

/**
* @Assert\Callback
 */
    public function formValidation(ExecutionContextInterface $context)
    {   
        die('not dying ?');
    }  

您使用的方法在版本2.3中有效,您现在可能使用2.4