• Home
  • News
  • Articles
  • Books
  • Videos
  • Hubs
  • Channels
  • EN
  • RU
  • 01 Jun, 25
  • About
  • Contact
DotDev
  • Home
  • News
  • Articles
  • Books
  • Videos
  • Hubs
  • Channels
  1. DotDev
  2. Articles
  3. Что нового в Symfony 6.2: Встроенные атрибуты для Cache, Security, Template и Doctrine

Что нового в Symfony 6.2: Встроенные атрибуты для Cache, Security, Template и Doctrine

Symfony 6.2 будет выпущен в конце ноября 2022. В этой серии статей мы рассмотрим новые возможности в Symfony 6.2.

Аннотации были добавлены в Symfony более 10 лет назад. Они были доступны при использовании дополнительного бандла SensioFrameworkExtraBundle.

С добавлением в PHP атрибутов, эти аннотации были переведены на нативные атрибуты. Но пакет sensio/framework-extra-bundle все еще должен был быть установлен что бы использовать их. Например: 

use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Symfony\Component\Routing\Annotation\Route;
#[Route('/comment/{postSlug}/new', methods: ['POST'], name: 'comment_new')]
#[IsGranted('IS_AUTHENTICATED_FULLY')]
#[ParamConverter('post', options: ['mapping' => ['postSlug' => 'slug']])]
public function addComment(Request $request, Post $post): Response
{
    // ...
}

В Symfony 6.2, были добавлены #[Cache], #[Template], #[IsGranted] и #[MapEntity] в виде нативных атрибутов, и теперь для их использования больше не нужно устанавливать доп. пакеты в проект. #[IsGranted] заменяет и улучшает аннотацию@Security() и #[MapEntity] заменяет@ParamConverter.

В большинстве приложений вам потребуется изменить только namespace без изменения вашего кода:

-use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
+use Symfony\Component\Security\Http\Attribute\IsGranted;
-use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache;
+use Symfony\Component\HttpKernel\Attribute\Cache;

Атрибут #[MapEntity] (доступен в DoctrineBundle >= 2.7.1) работает точно так же как #[ParamConverter]: в большинстве случаев вам не нужно использовать это атрибут явно, он работает автоматически.

Однако, если вы ранее использовали #[ParamConverter] с конфигурацией, вам необходимо сделать несколько изменений для использования нового атрибута #[MapEntity]. Так же новый атрибут применяется к свойствам а не всему методу целиком:

-use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
+use Symfony\Bridge\Doctrine\Attribute\MapEntity;
 // ...
-#[ParamConverter('post', options: ['mapping' => ['postSlug' => 'slug']])]
-public function addComment(Request $request, Post $post): Response
+public function addComment(
+    Request $request,
+    #[MapEntity(mapping: ['postSlug' => 'slug'])] Post $post
+): Response
 {
     // ...
 }

Атрибуты в PHP это отличный способ для управления конфигурацией через код. Однако если вы не хотите их использовать вы по прежнему можете описывать конфигурацию через XML/YAML или напрямую в PHP коде.

Tags
Articles symfony framework symfony php Программирование Symfony Web программирование на Symfony Symfony 6.2
  • 06 Nov, 22
  • 1 comments
  • 971 reads
SHARE:

Joe Black
Joe Black

News Author

Comments
  • 1000+
    Subscriptions
  • 1000+
    Followers
  • 1000+
    Followers
Tags
  • Python (230)
  • Программирование (181)
  • 2022 (170)
  • 2020 (151)
  • 2023 (149)
  • 2021 (128)
  • Java (128)
  • Linux (119)
  • 2019 (117)
  • Алгоритмы (112)
  • JavaScript (100)
  • Сети (99)
  • Api (92)
  • Инструменты (90)
  • Web (86)
  • Applications (79)
  • Microsoft (73)
  • PHP (73)
  • Google (72)
  • Обучение (72)
  • 2018 (68)
  • SQL (68)
  • C# (66)
  • ИИ (63)
  • Windows (60)
  • HTML (59)
  • 2017 (55)
  • C++ (53)
  • Базы данных (53)
  • Machine Learning (51)
  • Kubernetes (50)
  • Go (47)
  • Бизнес (47)
  • Паттерны (46)
  • CSS (44)
  • Проекты (42)
  • 2016 (41)
  • ИБ (41)
  • ОС (40)
  • .NET (39)
  • DevOps (39)
  • Docker (39)
  • React (39)
  • Проектирование (38)
  • Тестирование (38)
  • Математика (36)
  • Android (35)
  • Структуры Данных (35)
  • Информатика (34)
  • Framework (32)
Socials
  • Terms of Use
  • Privacy Policy
  • About
  • Contact

© 2025. DotDev — articles and lessons about IT programming and technology.