symfony4 Внедрение зависимостей в трейт. trait. dependency injection.
Primary tabs
В Symfony рекомендуется внедрять зависимости для использования в классе через конструктор - заполняя необходимыми объектами поля.
Как же инициализировать объект зависимости в трейте, если он не инициализирован в классе, использующем трейт?
Решение
Добавим в трейт сеттер с аннотацией @required:
<?php
namespace App\Controller;
use App\Entity\User;
use Symfony\Component\Security\Core\Security;
/**
* Трейт для работы с авторизованым пользователем
*/
trait AuthorizedUserTrait
{
/**
* @var Security
*/
private $security;
/**
* @param Security $security
*
* @required
*/
public function setSecurity(Security $security)
{
$this->security = $security;
}
/**
* @return User
*/
private function getAuthorizedUser(): User
{
return $this->security->getUser();
}
}Возможно Вам сможет помочь какой-то другой метод.
Источники
- https://stackoverflow.com/questions/11476222/symfony-2-dependency-injection-and-traits
- https://symfony.com/doc/current/service_container/autowiring.html#autowiring-other-methods-e-g-setters
- Log in to post comments
- 2866 reads