【问题标题】:Symfony 3 validation expression not evaluatedSymfony 3 验证表达式未评估
【发布时间】:2016-06-30 19:50:19
【问题描述】:

我的表单与设置了约束的模型相关联。当值符合约束时,验证会顺利通过,反之亦然……
除了只有一个字段装饰有似乎永远不会被评估的表达式约束。

我的需要是:如果我的模型的“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 级别与具有 XOR 行为的 property 级别?无论如何,你知道这里发生了什么吗?
谢谢。

【问题讨论】:

    标签: validation symfony


    【解决方案1】:

    实际上,我正在使用验证组,我只是忘记将 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 );
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-22
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多