У меня вопрос о расширении контроллера Symfony2.На данный момент я всегда расширял FrameworkBundle по одному для каждого контроллера в моем приложении.Но мне надоело всегда извлекать пользователя, делая
$this->get('security.context')->getToken()->getUser()
или
$this->getDoctrine()->getEntityManager()
каждый раз, когда мне нужен пользователь или менеджер сущностей (они мне очень нужны).Я хотел иметь возможность получить их, просто выполнив $ this-> em и $ this-> user.Поэтому я решил создать пакет с именем MyApp / RootBundle, который содержит новый контроллер, расширяющий FrameworkBundle.Этот контроллер будет расширяться каждым другим контроллером в приложении.Вот код:
<?php
namespace MyApp\RootBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\DependencyInjection\ContainerInterface;
class RootController extends Controller
{
protected $em;
protected $user;
public function setContainer(ContainerInterface $container = null)
{
parent::setContainer($container);
$this->onContainerSet();
}
public function onContainerSet()
{
$this->em = $this->getDoctrine()->getEntityManager();
$this->user = $this->get('security.context')->getToken()->getUser();
}
}
Я не смог загрузить пользователя $ this-> em и $ this-> в функцию __construct (), так как контейнер не загружался во время сборки.
Итак, мои вопросы:
- Это хорошая идея, или я должен продолжать делать подробные вызовы?
- Было бы лучше просто создать функции getEm ()и getUser (), который будет выполнять ту же работу?
Спасибо!