Правило Json
Правило Json относится к секции form и проверяет,
что значение поля является корректной JSON-строкой.
Если значение не является валидным JSON, валидация
завершится ошибкой. Правило можно использовать как
в атрибутах сущности, так и в опциях полей формы.
Синтаксис
#[Json(message: 'текст ошибки')]
Пример
Давайте создадим сущность с полем data,
которое должно содержать валидную JSON-строку:
<?php
namespace AppEntity;
use SymfonyComponentValidatorConstraints as Assert;
class Article
{
#[AssertJson(message: 'Значение должно быть валидным JSON.')]
private string $data = '';
public function getData(): string
{
return $this->data;
}
public function setData(string $data): self
{
$this->data = $data;
return $this;
}
}
?>
Пример
Давайте проверим валидацию с помощью сервиса ValidatorInterface:
<?php
namespace AppController;
use AppEntityArticle;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
use SymfonyComponentValidatorValidatorValidatorInterface;
class ArticleController extends AbstractController
{
#[Route('/article/validate', name: 'article_validate')]
public function validate(ValidatorInterface $validator): Response
{
$article = new Article();
$article->setData('{"name": "abcde", "age": 25}');
$errors = $validator->validate($article);
if (count($errors) > 0) {
return new Response((string) $errors);
}
return new Response('valid');
}
}
?>
Результат выполнения кода:
"valid"
Пример
Давайте проверим валидацию для некорректной JSON-строки:
<?php
namespace AppController;
use AppEntityArticle;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
use SymfonyComponentValidatorValidatorValidatorInterface;
class ArticleController extends AbstractController
{
#[Route('/article/invalid', name: 'article_invalid')]
public function invalid(ValidatorInterface $validator): Response
{
$article = new Article();
$article->setData('{name: abcde}');
$errors = $validator->validate($article);
if (count($errors) > 0) {
return new Response('invalid json');
}
return new Response('valid');
}
}
?>
Результат выполнения кода:
"invalid json"