РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
983 of 1361 menu

Атрибут Ignore

Атрибут Ignore вешается на свойство или метод класса и указывает сериализатору пропустить его при нормализации и денормализации. Это удобно, когда нужно скрыть конфиденциальные данные или временные поля, которые не должны попадать в итоговый массив. Атрибут не принимает обязательных параметров.

Синтаксис

#[Ignore]

Пример

Давайте создадим сущность User с полем password, которое мы хотим исключить из сериализации:

<?php namespace AppEntity; use SymfonyComponentSerializerAnnotationIgnore; class User { public string $name; #[Ignore] public string $password; public function __construct(string $name, string $password) { $this->name = $name; $this->password = $password; } } ?>

Теперь создадим контроллер, который сериализует объект User в JSON:

<?php namespace AppController; use AppEntityUser; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentSerializerSerializerInterface; class UserController extends AbstractController { public function index(SerializerInterface $serializer): Response { $user = new User('abcde', 'secret'); $json = $serializer->serialize($user, 'json'); return new Response($json); } } ?>

Результат выполнения кода:

{"name":"abcde"}

Как видите, поле password не попало в итоговый JSON, несмотря на то, что оно было заполнено значением 'secret'.

Пример

Атрибут Ignore можно вешать и на методы. Давайте исключим метод getFullInfo из сериализации:

<?php namespace AppEntity; use SymfonyComponentSerializerAnnotationIgnore; class Article { public string $title; public string $text; public function __construct(string $title, string $text) { $this->title = $title; $this->text = $text; } #[Ignore] public function getFullInfo(): string { return $this->title . ': ' . $this->text; } } ?>

Теперь сериализуем объект Article:

<?php namespace AppController; use AppEntityArticle; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentSerializerSerializerInterface; class ArticleController extends AbstractController { public function index(SerializerInterface $serializer): Response { $article = new Article('article', 'hello'); $json = $serializer->serialize($article, 'json'); return new Response($json); } } ?>

Результат выполнения кода:

{"title":"article","text":"hello"}

Метод getFullInfo не был вызван при сериализации, поэтому в JSON попали только свойства title и text.

Пример

Атрибут Ignore работает и при десериализации. Если в JSON есть поле, помеченное этим атрибутом, оно будет проигнорировано. Рассмотрим пример:

<?php namespace AppController; use AppEntityUser; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentSerializerSerializerInterface; class UserController extends AbstractController { public function index(SerializerInterface $serializer): Response { $json = '{"name":"abcde","password":"secret"}'; $user = $serializer->deserialize($json, User::class, 'json'); return new Response($user->password); } } ?>

Результат выполнения кода:

""

Поле password было проигнорировано при десериализации, поэтому оно осталось пустым, несмотря на то, что в JSON было передано значение 'secret'.

Смотрите также

  • класс Serializer,
    который выполняет сериализацию и десериализацию
  • метод serialize,
    который превращает объект в строку формата
  • метод deserialize,
    который создаёт объект из строки формата
  • атрибут Groups,
    который задаёт группы сериализации
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить