1

Controller で使用可能な EntitiesManager インスタンスを設定したいと考えています。コントローラーで $this->em を使用してインスタンスを利用できるようにします。これは私の構成です:

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());
}

このエラーが発生しました:「致命的なエラー:非オブジェクトでのメンバー関数find()の呼び出し」。EntityManager が正しくインスタンス化されていないようです。

私は何が欠けていますか?

ありがとうございました!

4

1 に答える 1

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);
             }
         });
    }
    
  • コントローラーは、$em フィールドと setEm メソッドを使用してそのまま使用できます

    //..
    protected $em;
    
    public function setEm(EntityManager $em) {
            $this->em = $em;
            return $this;
    }
    //..
    
于 2014-01-28T04:23:07.733 に答える