我一直在尝试调用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; } }
希望这是有道理的
您需要为您的类提供服务,并将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; } }
希望这是有道理的
将控制器注册为服务时,请勿扩展基本控制器类.有一个关于它的文件在这里
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 }