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

 撩人无聊的青春 发布于 2023-01-20 12:04

我正在使用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容器.

最后,您使用的是满足您的需求.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有