Правило Callback
Правило Callback позволяет задать собственную
функцию валидации. Первым параметром передаётся
callable-функция, которая получает значение поля
и объект ExecutionContext для добавления
ошибок валидации. Если функция добавляет ошибку,
поле считается невалидным.
Синтаксис
new Callback(callback: callable)
Пример
Давайте создадим форму с полем text и
проверим, что его значение не равно строке
'abcde':
<?php
namespace AppForm;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormExtensionCoreTypeTextType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentOptionsResolverOptionsResolver;
use SymfonyComponentValidatorConstraintsCallback;
use SymfonyComponentValidatorContextExecutionContextInterface;
class ArticleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->add('text', TextType::class, [
'constraints' => [
new Callback(function ($value, ExecutionContextInterface $context) {
if ($value === 'abcde') {
$context->buildViolation('Invalid value')
->addViolation();
}
}),
],
]);
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => null,
]);
}
}
?>
Пример
Давайте проверим работу формы в контроллере и выведем ошибки валидации:
<?php
namespace AppController;
use AppFormArticleType;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
class ArticleController extends AbstractController
{
public function index(Request $request): Response
{
$form = $this->createForm(ArticleType::class);
$form->submit(['text' => 'abcde']);
if ($form->isValid()) {
return new Response('valid');
}
foreach ($form->getErrors(true) as $error) {
return new Response($error->getMessage());
}
return new Response('');
}
}
?>
Результат выполнения кода:
"Invalid value"
Смотрите также
-
правило
NotBlank,
которое проверяет, что значение не пустое -
правило
NotNull,
которое проверяет, что значение не равно null -
правило
Expression,
которое валидирует значение через выражение -
класс
Form,
который представляет форму в Symfony