php - Symfony2.3 在 Controller 中获取 EntityManager 的更好方法

标签 php symfony symfony-2.3

我正在使用 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/

相关文章:

php - KNP Doctrine 行为与 Atlantic18 Doctrine 扩展

jquery - symfony2使用ajax模拟多个提交按钮

php - 在 CakePHP 中将 id 从自动增量更改为 char 36

php - 导入 postgresql 数据库转储

php - 如果已通过身份验证并且用户存在于数据库中,则将 Facebook 用户登录到 CakePHP 应用程序

regex - 带有语言环境的安全区域

php - Symfony2 - 在事件之间传递数据

php - PDO 出现错误

php - Composer : PHP Fatal error: Out of memory || Setting memory_limit doesn't work

php - Symfony2 中的多线程