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
, если он не был установлен).