2016-06-07 5 views
2

Я хочу использовать компонент Symfony Validator для проверки объектов, подобных Zend \ Db \ RowGateway. Очень упрощенный пример этого класса выглядит следующим образом:Проверка свойств виртуального класса (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: ~ 

При проверке экземпляра задачи я получаю следующее сообщение об ошибке: Имя свойства не существует в классе Row_Place

+0

Вы можете использовать @property по PHPDoc –

+0

Я думаю, что вы могли бы написать собственный валидатор для этого – Matteo

+0

@AndreasDyballa: Как? –

ответ

0

Если вы хотите проверить базовые данные в коллекции (массиве), вы можете использовать Collection constraint. В качестве примера можно определить как подтверждение:

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

Надеется, что это помощь

+0

Тот факт, что Задача хранит его значения в свойстве - это деталь реализации, которую я не хочу заботиться при создании валидаторов. –

+0

Привет @NikoSams Я понимаю ваш необходимый, но компонент Symfony Validator [проверьте свойства] (https://github.com/) symfony/validator/blob/master/Mapping/PropertyMetadata.php # L41) с помощью функции php 'property_exists', которая не может обнаружить свойства, которые доступны магическим путем с помощью метода магии __get, как описано в [doc] (http: // php .net/manual/en/function.property-exists.php) – Matteo

+0

Да, вот почему я спрашиваю об этом. Пользовательский Validator \ MetadataFactory, возможно, это сделает, но я не знаю, как ... –