2013-03-04 2 views
1

Я хочу установить экземпляр EntitiesManager, доступный на моем контроллере. Я хочу, чтобы экземпляр был доступен с помощью $ this-> em на контроллере. Это моя конфигурация:Doctrine2 + Zend Framework 2 - EntitiesManager как переменная в контроллере

module.config.php

[...] 
'doctrine' => array(
    'driver' => array(
     'application_entities' => array(
      'class' =>'Doctrine\ORM\Mapping\Driver\AnnotationDriver', 
      'cache' => 'array', 
      'paths' => array(__DIR__ . '/../src/Application/Entity') 
     ), 
     'orm_default' => array(
      'drivers' => array(
       'Application\Entity' => 'application_entities' 
      ), 
     ), 
    ), 
), 
'di' => array(
    'instance' => array(
     'alias' => array(
      'application' => 'Application\Controller\IndexController', 
     ), 
     'Application\Controller\IndexController' => array(
      'parameters' => array(
       'em' => 'doctrine_em', 
      ), 
     ), 
    ), 
), 

IndexController.php

namespace Application\Controller; 

use Zend\Mvc\Controller\AbstractActionController; 
use Zend\View\Model\ViewModel; 
use \Doctrine\ORM\EntityManager; 

class IndexController extends AbstractActionController 
{ 

protected $em; 

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

public function indexAction() { 
    $user1 = $this->em->find('\Application\Entity\User', 1); 
    var_dump($user1->getFullname()); 
} 

Я получил эту ошибку: "Фатальная ошибка: Вызов функции члена находке() на не-объект ". Кажется, что EntityManager неправильно создает экземпляр.

Что мне недостает?

Спасибо!

+0

Я не использую Учение, но это кул d, у вас нет определения в DI для «doctrine_em», не уверен, добавляет ли модуль для этого – Andrew

+0

Да «doctrine_em» не имеет отношения ни к чему, как я должен относиться к EntityManager? – Siol

ответ

0
  • Вы не что-либо в модуле конфигурации
  • редактируется module.php нужно, onbootstrap функции

    public function onBootstrap(\Zend\EventManager\EventInterface $e) { 
        $serviceManager = $e->getApplication()->getServiceManager(); 
        $em = $serviceManager; 
    
        $controllerLoader = $serviceManager->get('ControllerLoader'); 
        $controllerLoader->addInitializer(function ($controller) use ($em) { 
         if (method_exists($controller, 'setEm')) { 
          $controller->setEm($em); 
         } 
        }); 
    } 
    
  • контроллер остается, как вы есть, с полем эм $, и метод setEm

    //.. 
    protected $em; 
    
    public function setEm(EntityManager $em) { 
         $this->em = $em; 
         return $this; 
    } 
    //.. 
    
Смежные вопросы