У вас есть несколько опций, в зависимости от того, что именно вам нужно:
Вы можете внедрить это как глобальные переменные Twig, используя Event Listener.
- Создать класс слушателя:
namespace App\Listener;
// src/EventListener/ControllerListener.php
use Doctrine\ORM\EntityManager;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
use Symfony\Component\Security\Core\Security;
use Twig\Environment;
class ControllerListener {
/**
* @var \Twig\Environment
*/
private $twig;
/**
* @var \Doctrine\ORM\EntityManager
*/
private $manager;
/**
* @var \Symfony\Component\Security\Core\Security
*/
private $security;
public function __construct( Environment $twig, EntityManager $manager, Security $security ) {
$this->twig = $twig;
$this->manager = $manager;
$this->security = $security;
}
public function onKernelController( FilterControllerEvent $event ): void {
$results = $this->manager->getRepository( 'SomeClass' )->findBy( [ 'some' => 'criteria' ] );
$user = $this->security->getUser();
$this->twig->addGlobal( 'veryGlobal', $results[0]->getName() );
$this->twig->addGlobal( 'username', $user->getUsername() );
}
}
Я ввожу:
# config/services.yaml
services:
App\EventListener\ControllerListener:
tags:
- { name: kernel.event_listener, event: kernel.controller }
, что позволит обработчику событий запускаться при каждом запросе.
Использование конфигурации веток для внедрения глобальной службы:
С помощью этих строк конфигурации, как описано в документации , вы указываете ветке внедрять определенную службу:
# config/packages/twig.yaml
twig:
# ...
globals:
# the value is the service's id
users: '@App\Service\UserManagement'
Тогда это так же просто, как создать App\Service\UserManagement
:
namespace App\Service:
class UserManagement {
public function __construct() {
// use the constructor to inject your dependencies, as usual
}
public function getOldestUser() {
// do your thing
return $oldestUserName;
}
}
Тогда из ветки вы можете сделать:
{{ users.oldestUser }}
Наконец, если вас интересует толькоданные пользователя вошедшего в систему
Как уже упоминалось, если вас интересуют только данные, принадлежащие вошедшему в систему пользователю, вы можете просто получить к ним доступ через переменную приложения, которая вводится при каждом запросе .
Представление текущего пользователя или ноль, если его нет.Значением, хранящимся в этой переменной, может быть объект UserInterface, любой другой объект, который реализует метод __toString (), или даже обычная строка.
Например:
{{ app.user.userName }}