【问题标题】:Validate virtual class properties (Zend\Db\RowGateway)验证虚拟类属性 (Zend\Db\RowGateway)
【发布时间】:2016-10-07 07:46:20
【问题描述】:

我想使用 Symfony 验证器组件来验证类似于 Zend\Db\RowGateway 的对象。此类的一个非常简化的示例如下所示:

class Task
{
    private $values;
    public function __construct(array $values)
    {
        $this->values = $values;
    }

    public function __get($name)
    {
        return $this->values[$name];
    }
}

validation.yml:

Task:
    properties:
        name:
            - NotBlank: ~

在验证 Task 的实例时,我收到以下错误: Row_Place 类中不存在属性名称

【问题讨论】:

  • 你可以使用@property by phpdoc
  • 我认为你可以为此编写一个自定义验证器
  • @AndreasDyballa:怎么样?
  • @Matteo:我认为你做不到。
  • 您是否尝试在 getter 上设置约束(通过将您的 validation.yml 上的 properties 替换为 getters

标签: symfony symfony-validator


【解决方案1】:

如果您想验证集合(数组)中的基础数据,您可以使用Collection constraint。例如,您可以定义如下验证:

Task:
    properties:
        value:
            - Collection:
                fields:
                    name:
                        - Required
                            - NotBlank: ~

希望有帮助

【讨论】:

  • Task 将其值存储在属性中这一事实是我在创建验证器时不想关心的实现细节
  • 嗨@NikoSams 我了解您的需要,但是带有 php 函数 property_exists 的 Symfony 验证器组件 check for the properties 无法检测到使用 __get 魔术方法可以神奇地访问的属性。如doc 中所述
  • 是的,这就是我问这个的原因。自定义 Validator\MetadataFactory 可能可以做到这一点,但我不知道如何......
  • 抱歉@NikoSams 我发布了关于验证器组件如何找到您为约束定义的字段的代码,因此引擎也无法找到您的组件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
相关资源
最近更新 更多