Новое в Symfony 5.2: Атрибуты аргументов контроллера

PHP 8 будет выпущен через несколько недель и будет включать функцию изменения правил игры, называемую атрибутами (или аннотациями). Symfony 5.2 уже включает атрибуты для определения маршрутов и необходимых зависимостей, но мы продолжили добавлять поддержку атрибутов там, где это имеет смысл.

Вот почему в Symfony 5.2 вы также можете использовать атрибуты PHP для аргументов контроллера. Благодаря этой новой функции ввели атрибут #[CurrentUser] для превращения аргумента контроллера в объект, который представляет текущего пользователя, вошедшего в систему:

// src/Controller/SomeController.php
namespace App\Controller;

use App\Entity\MyUser;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Security\Http\Attribute\CurrentUser;

class SomeController extends AbstractController
{
    public function index(#[CurrentUser] MyUser $user)
    {
        // ...
    }
}

На практике это работает путем добавления нового метода к объекту ArgumentMetadata, передаваемому в преобразователи значений аргументов. Если вы определяете свои собственные преобразователи, теперь вы можете использовать метод getAttribute(), который возвращает атрибут, установленный для аргумента (или значение null, если он не был установлен).