我正在使用 Symfony2.3
,我目前正在使用 EntityManager,如 __construct()
使用 __construct() 中的 EntityManager 或在每个方法内部使用哪个更好?如public 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();
}
最佳答案
如果您必须在构造函数中使用EntityManager
,获取它的一个好方法是将它注入(inject)构造函数。
为此,您必须定义您的 controller as a service .
# 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 ]
现在您所要做的就是修改您的 Controller :
use Doctrine\ORM\EntityManager;
/**
* QuazBar controller.
*
*/
class QuazBarController extends Controller
{
public function __construct(EntityManager $em)
{
$this->em = $em;
}
// ...
}
如果您不需要构造函数中的Entity Manager
,您可以使用 Controller 中任何方法的依赖注入(inject)容器简单地获取它:
$this->getDoctrine()->getManager();
或
$this->container->get('doctrine')->getManager();
Controller /setter 注入(inject)是一个不错的选择,因为您没有将 Controller 实现耦合到 DI 容器。
最后你使用哪个取决于你的需要。
关于php - Symfony2.3 在 Controller 中获取 EntityManager 的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22154558/