Правило NotNull
Правило NotNull относится к валидации
и гарантирует, что значение поля не равно
null. Оно вешается на свойство сущности
или на поле формы. Если значение равно
null, валидация завершится ошибкой.
Правило можно использовать как в виде атрибута
PHP, так и в виде ограничения в YAML или XML.
Синтаксис
#[NotNull(message: 'text')]
Пример
Давайте создадим сущность с полем title,
на которое повесим правило NotNull:
<?php
namespace AppEntity;
use SymfonyComponentValidatorConstraints as Assert;
class Article
{
#[AssertNotNull(message: 'The title should not be null')]
private string $title;
public function getTitle(): string
{
return $this->title;
}
public function setTitle(string $title): void
{
$this->title = $title;
}
}
?>
Если передать в поле title значение
null, валидатор вернёт ошибку.
Пример
Давайте проверим работу правила через
ValidatorInterface:
<?php
namespace AppController;
use AppEntityArticle;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
use SymfonyComponentValidatorValidatorValidatorInterface;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(ValidatorInterface $validator): Response
{
$article = new Article();
$article->setTitle(null);
$errors = $validator->validate($article);
return new Response((string) $errors);
}
}
?>
Результат выполнения кода:
"Object(AppEntityArticle).title: The title should not be null"
Пример
Давайте создадим форму с полем title
и повесим на него правило NotNull:
<?php
namespace AppForm;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormExtensionCoreTypeTextType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentOptionsResolverOptionsResolver;
use SymfonyComponentValidatorConstraintsNotNull;
class ArticleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->add('title', TextType::class, [
'constraints' => [
new NotNull([
'message' => 'The title should not be null',
]),
],
]);
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => Article::class,
]);
}
}
?>
Если поле title не будет заполнено,
форма вернёт ошибку валидации.