2016-06-30 64 views
0

我的表单与建立约束的模型绑定在一起。当值符合约束时验证通过,反之亦然...
除了只有一个字段装饰有似乎永远不会被评估的表达式约束。Symfony 3验证表达式未评估

我需要的是:如果我的模型“helpType”属性值是不包含在某些阵列不及格验证所以我希望下面的代码工作:

// PostModel.php

/** 
* @Assert\Expression(
*  "this.isValidHelpType()", 
*  message="post.create.help-invalid" 
*) 
* @ORM\Column(type="integer") 
*/ 
protected $helpType; 
public function isValidHelpType() 
{ 
    return in_array($this->getHelpType(), Post::getHelpTypes()); 
} 

// PostType.php

// … 
->add('helpType', TextType::class, [ 'error_bubbling' => true, 'label'=>false ]) 
// … 

约束似乎从来没有得到执行,因为无论何时我把"false"代替表达式,或从内部die; isValidHelpType()函数(在return语句之前,显然)没有任何反应。

是否存在某种不同类型的约束,如class级别与property级别的异或行为?无论如何,这里有什么想法?
谢谢。

回答

0

实际上,我使用的是验证组,我只是忘了将group={"some_group"}属性放在该约束上,与执行上下文相关。

最后,这里是我结束了在为了确保一(整数)值包含在一些阵列:

<?php 
// ... 
/** 
* @Assert\Expression(
*  "this.isHelpTypeValid()", 
*  message="create.help-invalid", 
*  groups={"creation"} 
*) 
* @ ORM\Column(type="integer") 
*/ 
protected $helpType; 
public function isHelpTypeValid() 
{ 
    // value from POST are strings, now make sure it looks like numeric 
    return is_numeric($this->getHelpType()) 
     // Cast to integer and set value 
     && $this->setHelpType((int)$this->getHelpType()) 
     // now test if reference array contains that value 
     && in_array($this->getHelpType(), Post::getHelpTypes(), true); 
}