我尝试使用函数来验证子表单。
子表单与父实体级联持久,具有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
答案 0 :(得分:1)
需要添加:'cascade_validation'=>是的,
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'YOU\ProductBundle\Entity\Product',
'cascade_validation' => true,
));
}