NBP*_*ino 5 php symfony symfony-2.3
我正在使用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();
}
Run Code Online (Sandbox Code Playgroud)
One*_*ema 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 ]
Run Code Online (Sandbox Code Playgroud)
现在你要做的就是修改你的控制器:
use Doctrine\ORM\EntityManager;
/**
* QuazBar controller.
*
*/
class QuazBarController extends Controller
{
public function __construct(EntityManager $em)
{
$this->em = $em;
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
如果Entity Manager
在构造函数中不需要,可以使用控制器中任何方法的依赖注入容器来获取它:
$this->getDoctrine()->getManager();
Run Code Online (Sandbox Code Playgroud)
要么
$this->container->get('doctrine')->getManager();
Run Code Online (Sandbox Code Playgroud)
控制器/设置器注入是一个不错的选择,因为您没有将控制器实现耦合到DI容器.
最后,您使用的是满足您的需求.