级联中的Symfony2 Validator ExecutionContextInterface

时间:2013-07-02 16:22:16

标签: forms validation symfony callback constraints

我尝试使用函数来验证子表单。

子表单与父实体级联持久,具有OneToOne关系。

在我的实体顶部:

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\ExecutionContextInterface;

在底部,功能:

public function verifyCommandeTypeValide(ExecutionContextInterface $context)
{
    die('ok');

    $valide = false;

    if($this->getLivraison() === true){
        $valide = true;
        if(preg_match("/^[0-9]$/", $this->getLivraisondelais())){
            $context->addViolationAt('livraisondelais','Le délais de livraison ne doit contenir que des chiffres.');
        }
        if($this->getLivraisonprice() === null){
            $context->addViolationAt('livraisonprice','Vous devez définir les frais de livraison.');
        }
    }

    if($this->getRetrait() === true){
        $valide = true;
        if(preg_match("/^[0-9]$/", $this->getRetraitdelais())){
            $context->addViolationAt('retraitdelais','Le délais de retrait ne doit contenir que des chiffres.');
        }
    }

    if($valide === false){

        $context->addViolationAt('livraison','Vous devez définir une méthode de retrait pour le produit.');
    }
}

验证.yml:

YOU\ProductBundle\Entity\CommandeType :
    constraints:
        - Callback:
            methods:   [verifyCommandeTypeValide]

YOU\ProductBundle\Entity\Product:
    properties:
        titre:
            - Length :
                min :     3
                max:      150
                maxMessage :       "Le titre du produit ne dois pas dépasser 150 caractères."
                minMessage :       "Le titre du produit dois faire plus de 3 caractères."
            - NotBlank :
                message :       "Vous devez donner un titre au produit."

        cat1:
            - NotNull :
                message :       "Vous devez compléter la catégorie de niveau 1 au minimum."

        images:
            - Count :
                min : 1
                max : 5
                minMessage :       "Vous devez mettre 1 photo au minimum."
                maxMessage :       "Le nombre de photos est limité à 5."

如果我尝试在第一个表单层中使用约束回调,请执行:YOU \ ProductBundle \ Entity \ Product 这项工作,回调被执行。 但是没有执行回调:YOU \ ProductBundle \ Entity \ CommandeType

任何人都知道如何将它与OneToOne的关系一起使用?

THX

1 个答案:

答案 0 :(得分:1)

需要添加:'cascade_validation'=>是的,

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'YOU\ProductBundle\Entity\Product',
        'cascade_validation' => true,
    ));
}