3

ZF2 プロジェクトのさまざまなクラスにドクトリン エンティティ マネージャを配置したいと考えています。したがって。に次のイニシャライザをセットアップしましたModule.php

'initializers' => array(
      function ($instance, $services) {
            if (is_object($instance)) { // just for debugging
                var_dump(get_class($instance));
            }
            if (!$instance instanceof EntityManagerAwareInterface) {
                return;
            }

            $entityManager = $services->get('doctrine.entitymanager.orm_default');
            $instance->setEntityManager($entityManager);
        },
    ),
)

それでも、AuthControllerそのコントローラーのサイトにアクセスしているにもかかわらず、呼び出されることはありません(エンティティマネージャーが設定されていないため、ヌルポインター例外が発生します)。もちろん、コントローラーは必要なインターフェースを実装しています。

class AuthController extends AbstractActionController implements EntityManagerAwareInterface

AuthControllerイニシャライザクロージャに対してチェックされるように設定する必要があるものは他にありますか?

現時点では、invokablesの下にありmodule.config.phpます。

'controllers' => array(
    'invokables' => array(
        'Auth\Controller\Auth' => 'Auth\Controller\AuthController',
    ),
),

そこから削除すると、アプリケーションはクラスを見つけることができなくなります。

私のデバッグ出力には、初期化子、多くのマネージャー、およびサービスに対してチェックされる他のクラスがリストされています。小さな抜粋:

string(37) "Zend\\Mvc\\Controller\\ControllerManager"
string(33) "Zend\\Mvc\\Controller\\PluginManager"
string(29) "Zend\\View\\HelperPluginManager"
[...]
string(24) "Doctrine\\DBAL\\Connection"
string(26) "Doctrine\\ORM\\EntityManager"
string(41) "Zend\\Authentication\\AuthenticationService"
4

1 に答える 1

3

コントローラマネージャの初期化子も追加してみてください。デバッグ出力から判断すると、投稿したものはサービスマネージャ用のようです。他のマネージャーも同じように構成します。コントローラーマネージャーに使用する方法は次のとおりです。getControllerConfig

 public function getControllerConfig()
 {
      return array(
          'initializers' => array(
              // controller initializers here...
          ),
      );
 }
于 2013-02-01T08:54:38.750 に答える