我有一個關於Symfony2控制器擴展的問題。目前,我一直在爲我的應用程序中的每個控制器擴展一個FrameworkBundle。但我通過製作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();
}
}
我無法加載$這個 - > EM和$這個 - >用戶自容器__construct()函數不是在施工時加載。
所以我的問題是:
- 那是一個好主意,或者我應該繼續做詳細的電話?
- 只是創建可以完成同樣工作的函數getEm()和getUser()會更好嗎?
謝謝!
好主意,我會做同樣的:) – Nanocom
這裏是摘錄: 'public function getEm(){ return $ this-> getDoctrine() - > getEntityManager(); } public function getRepository($ shortEntityName){ return $ this-> getEm() - > getRepository(「SicoStockBundle:$ shortEntityName」); }' –