我的表单与设置约束的模型相关联。当值符合约束时,验证会优雅地通过,反之亦然...... 除外,只有一个字段使用表达式约束修饰,似乎永远不会被评估。
我的需求是:如果我的模特" 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"
替换为表达式时,约束似乎永远不会被执行,或者来自 isValidHelpType()函数内部的die;
(在return语句之前)没有任何反应。
是否存在某种不同类型的约束,例如class
级别与property
级别的XOR行为?无论如何,任何关于这里发生了什么的想法?
谢谢。
答案 0 :(得分: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 );
}