如何在构造函数中调用实体管理器?

 指尖青春_388 发布于 2023-02-10 13:50

我一直在尝试调用Entity Manager构造函数:

function __construct()
{
    $this->getDoctrine()->getEntityManager();
    ...

但是,正如我在这个答案中看到的:Stackoverflow问题,它无法完成.

所以我想知道是否有办法实现它,因为我必须经常调用它,并希望在获取存储库后在构造函数中做一些事情.

编辑:

我试过@MKhalidJunaid回答:

//src/MSD/HomeBundle/Resources/config/services.yml
services:
  imageTransController.custom.service:
    class:  MSD\HomeBundle\Controller\ImageTransController
    arguments: 
        EntityManager: "@doctrine.orm.entity_manager"

-

//app/config/config.php
imports:
- { resource: parameters.yml }
- { resource: security.yml }
- { resource: doctrine_extensions.yml }
- { resource: "@MSDHomeBundle/Resources/config/services.yml" }

-

//src/MSD/HomeBundle/Controller/ImageTransController.php
namespace MSD\HomeBundle\Controller;

use Doctrine\ORM\EntityManager;
use MSD\HomeBundle\Entity\Imagen as Imagen;
use MSD\HomeBundle\Controller\HomeController as HomeController;


class ImageTransController extends HomeController
{
    protected $em ;

    function __construct(EntityManager $entityManager)
    {
    ...

但我收到这个错误:

Catchable Fatal Error: Catchable Fatal Error: Argument 1 passed to MSD\HomeBundle\Controller\ImageTransController::__construct() must be an instance of Doctrine\ORM\EntityManager, none given, called in /home/manolo/MiServer/itransformer/app/cache/dev/jms_diextra/controller_injectors/MSDHomeBundleControllerImageTransController.php on line 13 and defined in /home/manolo/MiServer/itransformer/src/MSD/HomeBundle/Controller/ImageTransController.php line 38 (500 Internal Server Error)

新尝试:

我也试过@praxmatig回答:

//services.yml
parameters:
 msd.controller.imagetrans.class: MSD\HomeBundle\Controller\ImageTransController

services:
  msd.imagetrans.controller:
    class:  "%msd.controller.imagetrans.class%"
    arguments: [ @doctrine.orm.entity_manager  ]

-

//ImageTransController.php
namespace MSD\HomeBundle\Controller;

 use Doctrine\ORM\EntityManager;

class ImageTransController 
 {
    protected $em ;

    function __construct(EntityManager $em)
    {
        $this->em = $em;
    }
     ...

-

//routing.yml
msd_home_cambiardimensiones:
    pattern: /cambiardimensiones
    defaults: { _controller: MSDHomeBundle:msd.imagetrans.controller:cambiardimensionesAction }

但我得到这个错误:

 Unable to find controller "MSDHomeBundle:msd.imagetrans.controller" - class "MSD\HomeBundle\Controller\msd.imagetrans.controllerController" does not exist. (500 Internal Server Error)

M Khalid Jun.. 13

您需要为您的类提供服务,并将doctrine实体管理器作为参数传递doctrine.orm.entity_manager.Like in services.yml

services:
  test.cutom.service:
    class:  Test\YourBundleName\Yourfoldernameinbundle\Test
    #arguments:
    arguments: [ @doctrine.orm.entity_manager  ] 
        #entityManager: "@doctrine.orm.entity_manager"

您必须在config.yml中导入services.yml

imports:
    - { resource: "@TestYourBundleName/Resources/config/services.yml" }

然后在类的构造函数中获取实体管理器作为参数

use Doctrine\ORM\EntityManager;
Class Test {

  protected $em;

  public function __construct(EntityManager $entityManager)
  {
    $this->em = $entityManager;
  }
}

希望这是有道理的

2 个回答
  • 您需要为您的类提供服务,并将doctrine实体管理器作为参数传递doctrine.orm.entity_manager.Like in services.yml

    services:
      test.cutom.service:
        class:  Test\YourBundleName\Yourfoldernameinbundle\Test
        #arguments:
        arguments: [ @doctrine.orm.entity_manager  ] 
            #entityManager: "@doctrine.orm.entity_manager"
    

    您必须在config.yml中导入services.yml

    imports:
        - { resource: "@TestYourBundleName/Resources/config/services.yml" }
    

    然后在类的构造函数中获取实体管理器作为参数

    use Doctrine\ORM\EntityManager;
    Class Test {
    
      protected $em;
    
      public function __construct(EntityManager $entityManager)
      {
        $this->em = $entityManager;
      }
    }
    

    希望这是有道理的

    2023-02-10 13:52 回答
  • 将控制器注册为服务时,请勿扩展基本控制器类.有一个关于它的文件在这里

    class ImageTestController
    {
         private $em;
    
         public function __construct(EntityManager $em)
         {
             $this->em = $em;
         }
    
         public function someAction()
         {
             // do something with $this->em
         }
    }
    
    // services.yml
    services:
        acme.controller.image_test:
            class: Acme\SomeBundle\Controller\ImageTestController
    
    // routing.yml
    acme:
        path: /
        defaults: { _controller: acme.controller.image_test:someAction }
    

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