我正在使用Symfony2.3
,我目前正在使用EntityManager,如__construct()中所示
哪个是使用__construct()中的 EntityManager 或在每个方法中使用的更好的方法?如公共indexAction()所示
/**
* QuazBar controller.
*
*/
class QuazBarController extends Controller
{
public function __construct()
{
$this->em = $GLOBALS['kernel']->getContainer()->get('doctrine')->getManager();
}
/**
* Lists all QuazBar entities.
*
*/
public function indexAction(Request $request)
{
$session = $request->getSession();
$pagina = $request->query->get('page', 1);
$em = $this->getDoctrine()->getManager();
}
Onema.. 10
如果你的构造函数中必须有EntityManager
可用的,那么获取它的好方法是将它注入构造函数.
为此,您必须将控制器定义为服务.
# src/Acme/DemoBundle/Resources/config/services.yml parameters: # ... acme.controller.quazbar.class: Acme\DemoBundle\Controller\QuazBarController services: acme.quazbar.controller: class: "%acme.controller.quazbar.class%" # inject doctrine to the constructor as an argument arguments: [ @doctrine.orm.entity_manager ]
现在你要做的就是修改你的控制器:
use Doctrine\ORM\EntityManager; /** * QuazBar controller. * */ class QuazBarController extends Controller { public function __construct(EntityManager $em) { $this->em = $em; } // ... }
如果Entity Manager
在构造函数中不需要,可以使用控制器中任何方法的依赖注入容器来获取它:
$this->getDoctrine()->getManager();
要么
$this->container->get('doctrine')->getManager();
控制器/设置器注入是一个不错的选择,因为您没有将控制器实现耦合到DI容器.
最后,您使用的是满足您的需求.