Symfony 2.7 - Как загрузить валидатор?

1

Мне сложно загружать валидатор в symfony на основе их примера в документации.

Когда я это делаю:

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

Я получаю это:

 Attempted to call an undefined method named "get" of class
   "DBViewerBundle\Repository\SchoolRepository".
    Did you mean to call e.g. "getSchoolInfo" or "getSchools"?

Я предположил, что когда я получил эту ошибку, это было потому, что в этом классе репозитория не имеется "расширение контроллера" или что-то, что может включать в себя валидатор. Пробовал его с помощью контроллера, без везения. Даже пытались сделать это автономно и по-прежнему получать ошибки. Я предполагаю, что есть что-то еще, что я должен разрешить где-нибудь?

Автономный путь, я следил за этим документом: http://blog.chrisworfolk.com/2012/06/20/using-the-symfony2-validator-component-outside-the-framework/

Я получаю это:

Attempted to load class "ValidatorFactory" from namespace "Symfony\Component\Validator".
Did you forget a "use" statement for another namespace?

Я определенно использую их для Symfony\Component\Validator.

Теги:
validation

2 ответа

1
Лучший ответ

Документ, который вы используете, предназначен для устаревшей версии Symfony. Вы должны использовать класс Validation. Проверьте их страницу github для примеров: https://github.com/symfony/Validator

Все, что вам нужно, это использовать метод Validation::createValidator() или Validation::createValidatorBuilder().

0

Репозиторий не должен содержать ничего, кроме запроса, который отвечает за получение некоторых данных откуда-либо. Валидатор доступен только в Controller или в Service (передавая его как переменную при указании ее как службы в services.yml).

Кроме того, вы можете использовать Annotations для создания конкретных требований к своим полям. Например, вы можете потребовать, чтобы поле не было пустым, а строка должна иметь определенную длину:

// User.php (Entity)

use Symfony\Component\Validator\Constraints as Assert;

class User {

    /**
     * @Assert\NotBlank()
     * @Assert\Length(min="6", max="12")
     */
    private $username;

}

Теперь вам просто нужно включить проверку аннотации (которая по умолчанию установлена в true) в config.yml:

framework:
    validation:      { enable_annotations: true }

В вашем контроллере вам нужно будет только сделать

public function yourActionName(Request $request) {
    $form = $this->createForm(....);
    $form->handleRequest($request);

    if($form->isValid()) {
        // perform the action you want when the form is valid.
    }
}

Вот официальная документация.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню