未评估Symfony 3验证表达式

时间:2016-06-30 19:50:19

标签: validation symfony

我的表单与设置约束的模型相关联。当值符合约束时,验证会优雅地通过,反之亦然...... 外,只有一个字段使用表达式约束修饰,似乎永远不会被评估。

我的需求是:如果我的模特" 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行为?无论如何,任何关于这里发生了什么的想法?
谢谢。

1 个答案:

答案 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 );
}