2015-02-24 2 views
0

У меня есть моя настройка validation.yml в моих каталогах Ресурсы/config. Я включил использование валидатор в моем config.yml:Проверки Symfony2 (yml) игнорируются

framework: 
    validation: { enabled: true, enable_annotations: false } 

Ресурсы/конфигурации/validation.yml:

MyBundle\AppBundle\Handler\SearchModel: 
    properties: 
     search: 
      - Length: 
       min: 2 
       max: 50 
       minMessage: "Your string must be at least {{ limit }} characters long" 
       maxMessage: "Your string cannot be longer than {{ limit }} characters long" 

В моем контроллере я делаю:

$validator = $this->get('validator'); 
$errors = $validator->validate($searchModel); 

Я уверен (потому что я дважды проверял), что свойство модели, подлежащей проверке, является строкой (1) 1 char. (Должно быть минимальным 2!)

Но var_dump() из $ ошибок с указанием:

object(Symfony\Component\Validator\ConstraintViolationList)#327 (1) { 
["violations":"Symfony\Component\Validator\ConstraintViolationList":private]=> 
    array(0) { 
    } 
} 

Таким образом, никаких ошибок не выбрасываются. Как я могу это решить? Я хочу, чтобы валидатор работать :)

Update

Я получил его на работу (в настоящее время) с обходным. Я добавил метод loadValidatorMetaData для класса (SearchModel) для проверки.

public static function loadValidatorMetadata(ClassMetadata $metadata) 
{ 
    $metadata 
     ->addPropertyConstraint(
      'search', 
      new Assert\Length(
       array('min' => 2, 'minMessage' => 'Error message.') 
      ) 
     ); 
} 

При проверке $ validator-> validate ($ searchModel); он возвращает ошибку, поэтому проверки работают. Но не с .yml файлом :(

+0

Начните с примера в документах: http://symfony.com/doc/current/book/validation.html#using-the-validator-service. Замените «довольно уверенно» абсолютно уверенным, тестируя новый экземпляр вашей модели поиска. Возможно, кеш требует очистки. И ваш файл проверки находится в комплекте Symfony 2, который загружен в ваш AppKernel? – Cerad

+0

Спасибо за ответ. Я повторно протестировал его, очистил кеш для правильного env. Также мой validation.yml выглядит корректно. Еще ничего. Возможно ли, что он работает только для моделей в каталоге сущностей? – Faiawuks

+0

Он будет работать для всех объектов. Дважды проверьте полное имя. Может быть, опечатка в пространстве имен? – Cerad

ответ

0

Я установки немного теста и не получили никаких ошибок. Я добавил NotBlank ограничения и получил ошибку, когда поиск был пустым.

Acme\DemoBundle\Command\SearchModel: 
properties: 
    search: 
     - Length: 
      min: 2 
      max: 5 
      minMessage: "Your string must be at least {{ limit }} characters long" 
      maxMessage: "Your string cannot be longer than {{ limit }} characters long" 
     - NotBlank: ~ 

Затем я свой поиск . на один символ

class SearchModel 
{ 
    public $search = 'a'; 
} 

И это вызвало мин ошибки длины

Я прочитал длину Документов. http://symfony.com/doc/current/reference/constraints/Length.html Конечно кажется струнной Shou нулевой длины ld вызывает ошибку.

В любом случае добавьте ограничение NotBlank, и вам должно быть хорошо идти.

Я проверил код:

namespace Symfony\Component\Validator\Constraints; 

class LengthValidator extends ConstraintValidator 
{ 

public function validate($value, Constraint $constraint) 
{ 
    if (null === $value || '' === $value) { 
     return; 
    } 

Так что я думаю, это то, что известно как незарегистрированные «прибамбасы». Строковая длина нуля не считается меньше min! Любопытно узнать, есть ли отчет об ошибке. Но опять же NotBlank будет работать. Вы всегда можете настроить сообщение об ошибке, чтобы пользователь знал ограничения.

+0

Вы использовали общедоступную переменную. Я тоже должен это проверить. Я использую частные переменные. Может ли так быть? – Faiawuks

+0

Nope. Отражение используется для доступа к частным переменным. Ваш NonBlank должен работать до тех пор, пока вы уверены, что имя класса верное. Используйте dir (get_class ($ searchModel)) для подтверждения. – Cerad

Смежные вопросы