Мне сложно загружать валидатор в 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.
Документ, который вы используете, предназначен для устаревшей версии Symfony. Вы должны использовать класс Validation. Проверьте их страницу github для примеров: https://github.com/symfony/Validator
Все, что вам нужно, это использовать метод Validation::createValidator()
или Validation::createValidatorBuilder()
.
Репозиторий не должен содержать ничего, кроме запроса, который отвечает за получение некоторых данных откуда-либо. Валидатор доступен только в 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.
}
}
Вот официальная документация.