使用EntityMenager进行Symfony依赖注入

时间:2016-07-24 22:45:50

标签: symfony dependency-injection doctrine-orm

我不得不在服务中呼叫控制器。以这种方式,我创建了connstruct函数并添加参数EntityMenager

class UsersController extends Controller
{
    private $em;

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

并为该控制器定义了服务

services:
  user_controller:
    class: AppBundle\Controller\UsersController
    arguments:
      ['@doctrine.orm.entity_manager']

当我打电话给那个服务时

$usersContainer = $this->get('user_controller');

在其他控制器中一切都很好。

但是当我打电话给自我控制器时我得到错误

Catchable Fatal Error: 
Argument 1 passed to AppBundle\Controller\UsersController::__construct()
must be an instance of Doctrine\ORM\EntityManager, none given,

我犯错的地方?

2 个答案:

答案 0 :(得分:1)

我只是做丑陋的黑客并在此刻解决问题。

我删除了__construc类,并将EntityManager作为需要的参数添加到需要EntityManager类的函数中。

 public function getLoggedUserData($loggedUserId, $entityManager)
    {
        $user               = $entityManager->getRepository('...')
        $newRequests        = $entityManager->getRepository('...')

答案 1 :(得分:1)

如果Controller是一个简单的类(不扩展Controller),则只能将Controller定义为服务。

请参阅:http://symfony.com/doc/current/cookbook/controller/service.html

特别是: http://symfony.com/doc/current/cookbook/controller/service.html#alternatives-to-base-controller-methods