2016-05-20 10 views
2

ZF2でdoctrine 2を使用しようとすると、次のエラーが発生します。ZF2 ServiceManagerがdoctrine.entitymanager.orm_defaultを作成できません

のZend \ ServiceManager \ ServiceManagerは:: getがフェッチまたはdoctrine.entitymanager.orm_default

必要なモジュールが含まれ、活性化するためにインスタンスを作成することができませんでした。

doctrine.config.local.php

return [ 
    'doctrine' => [ 
     'connection' => [ 
      'orm_default' => [ 
       'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver', 
       'params' => [ 
        'host' => 'localhost', 
        'port' => '3306', 
        'user' => 'root', 
        'password' => 'password', 
        'dbname' => 'database', 
        'charset' => 'utf8', 
        'driverOptions' => [ 
         1002 => 'SET NAMES utf8' 
        ], 
       ], 
      ], 
     ], 

     'configuration' => [ 
      'orm_default' => [ 
       'metadata_cache' => 'array', 
       'query_cache' => 'array', 
       'result_cache' => 'array', 
       'hydration_cache' => 'array', 

       'generate_proxies' => false, 
      ] 
     ] 
    ] 
]; 

コアモジュールのmodule.config.php(/module/Core/config/module.config.php)

namespace Core; 

return [ 
    'service_manager' => include __DIR__ . '/service-manager.config.php', 
    'router' => include __DIR__ . '/router.config.php', 
    'view_manager' => include __DIR__ . '/view-manager.config.php', 
    'translator' => include __DIR__ . '/translator.config.php', 
    'hydrators' => include __DIR__ . '/hydrators.config.php' 
]; 

コアモジュールのdoctrine.config.php(/module/Core/config/doctrine.config.php)

return [ 
    'driver' => [ 
     __NAMESPACE__ . '_driver' => [ 
      'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver', 
      'cache' => 'array', 
      'paths' => [ 
       __DIR__ . '/../src/' . __NAMESPACE__ . '/Entity', 
      ] 
     ], 
     'orm_default' => [ 
      'drivers' => [ 
       __NAMESPACE__ => __NAMESPACE__ . '_driver' 
      ] 
     ] 
    ] 
]; 

工場

namespace Event\Form\Fieldset\Factory; 

use Event\Entity\Event; 
use Event\Form\Fieldset\EventFieldset; 
use Zend\ServiceManager\FactoryInterface; 
use Zend\ServiceManager\ServiceLocatorInterface; 

class EventFieldsetFactory implements FactoryInterface { 

    public function createService(ServiceLocatorInterface $formElementManager) { 
     $serviceLocator = $formElementManager->getServiceLocator(); 
     $hydratorManager = $serviceLocator->get('HydratorManager'); 

     // Here I get the error! 
     $objectManager = $serviceLocator->get('Doctrine\ORM\EntityManager'); 

     $fieldset = new EventFieldset(); 
     $fieldset->setObjectManager($objectManager); 
     $fieldset->setHydrator($hydratorManager->get('Core\Hydrator\Doctrine')); 
     $fieldset->setObject(new Event()); 

     return $fieldset; 
    } 

} 

モジュールapplication.config.php

'modules' => [ 
    'DoctrineModule', 
    'DoctrineORMModule', 
    'Core', 
    'Event', 
    'Inquiry' 
] 

スタックトレースで

Zend\ServiceManager\Exception\ServiceNotFoundException 

ファイル:

/src/vendor/zendframework/zend-servicemanager/src/ServiceManager.php:555 

メッセージ:

Zend\ServiceManager\ServiceManager::get was unable to fetch or create an instance for doctrine.entitymanager.orm_default 

スタックトレース:

#0 /src/vendor/doctrine/doctrine-orm-module/src/DoctrineORMModule/Service/EntityManagerAliasCompatFactory.php(44): Zend\ServiceManager\ServiceManager->get('doctrine.entity...') 
#1 [internal function]: DoctrineORMModule\Service\EntityManagerAliasCompatFactory->createService(Object(Zend\ServiceManager\ServiceManager), 'doctrineormenti...', 'Doctrine\ORM\En...') 
#2 /src/vendor/zendframework/zend-servicemanager/src/ServiceManager.php(934): call_user_func(Array, Object(Zend\ServiceManager\ServiceManager), 'doctrineormenti...', 'Doctrine\ORM\En...') 
#3 /src/vendor/zendframework/zend-servicemanager/src/ServiceManager.php(1092): Zend\ServiceManager\ServiceManager->createServiceViaCallback(Array, 'doctrineormenti...', 'Doctrine\ORM\En...') 
#4 /src/vendor/zendframework/zend-servicemanager/src/ServiceManager.php(634): Zend\ServiceManager\ServiceManager->createFromFactory('doctrineormenti...', 'Doctrine\ORM\En...') 
#5 /src/vendor/zendframework/zend-servicemanager/src/ServiceManager.php(597): Zend\ServiceManager\ServiceManager->doCreate('Doctrine\ORM\En...', 'doctrineormenti...') 
#6 /src/vendor/zendframework/zend-servicemanager/src/ServiceManager.php(530): Zend\ServiceManager\ServiceManager->create(Array) 
#7 /src/module/Event/src/Event/Form/Fieldset/Factory/EventFieldsetFactory.php(22): Zend\ServiceManager\ServiceManager->get('Doctrine\ORM\En...') 
#8 [internal function]: Event\Form\Fieldset\Factory\EventFieldsetFactory->createService(Object(Zend\Form\FormElementManager\FormElementManagerV2Polyfill), 'eventfieldsetev...', 'Event\Fieldset\...') 
#9 /src/vendor/zendframework/zend-servicemanager/src/ServiceManager.php(934): call_user_func(Array, Object(Zend\Form\FormElementManager\FormElementManagerV2Polyfill), 'eventfieldsetev...', 'Event\Fieldset\...') 
#10 /src/vendor/zendframework/zend-servicemanager/src/AbstractPluginManager.php(330): Zend\ServiceManager\ServiceManager->createServiceViaCallback(Array, 'eventfieldsetev...', 'Event\Fieldset\...') 
#11 /src/vendor/zendframework/zend-servicemanager/src/AbstractPluginManager.php(287): Zend\ServiceManager\AbstractPluginManager->createServiceViaCallback(Array, 'eventfieldsetev...', 'Event\Fieldset\...') 
#12 /src/vendor/zendframework/zend-servicemanager/src/ServiceManager.php(634): Zend\ServiceManager\AbstractPluginManager->createFromFactory('eventfieldsetev...', 'Event\Fieldset\...') 
#13 /src/vendor/zendframework/zend-servicemanager/src/ServiceManager.php(597): Zend\ServiceManager\ServiceManager->doCreate('Event\Fieldset\...', 'eventfieldsetev...') 
#14 /src/vendor/zendframework/zend-servicemanager/src/ServiceManager.php(530): Zend\ServiceManager\ServiceManager->create(Array) 
#15 /src/vendor/zendframework/zend-servicemanager/src/AbstractPluginManager.php(161): Zend\ServiceManager\ServiceManager->get('Event\Fieldset\...', true) 
#16 /src/vendor/zendframework/zend-form/src/FormElementManager/FormElementManagerTrait.php(38): Zend\ServiceManager\AbstractPluginManager->get('Event\Fieldset\...', Array, true) 
#17 /src/vendor/zendframework/zend-form/src/Factory.php(111): Zend\Form\FormElementManager\FormElementManagerV2Polyfill->get('Event\Fieldset\...') 
#18 /src/vendor/zendframework/zend-form/src/Form.php(176): Zend\Form\Factory->create(Array) 
#19 /src/module/Inquiry/src/Inquiry/Form/InquiryForm.php(19): Zend\Form\Form->add(Array) 
#20 /src/vendor/zendframework/zend-form/src/FormElementManager/FormElementManagerV2Polyfill.php(217): Inquiry\Form\InquiryForm->init() 
#21 [internal function]: Zend\Form\FormElementManager\FormElementManagerV2Polyfill->callElementInit(Object(Inquiry\Form\InquiryForm), Object(Zend\Form\FormElementManager\FormElementManagerV2Polyfill)) 
#22 /src/vendor/zendframework/zend-servicemanager/src/ServiceManager.php(664): call_user_func(Array, Object(Inquiry\Form\InquiryForm), Object(Zend\Form\FormElementManager\FormElementManagerV2Polyfill)) 
#23 /src/vendor/zendframework/zend-servicemanager/src/ServiceManager.php(597): Zend\ServiceManager\ServiceManager->doCreate('Inquiry\Form\In...', 'inquiryforminqu...') 
#24 /src/vendor/zendframework/zend-servicemanager/src/ServiceManager.php(530): Zend\ServiceManager\ServiceManager->create(Array) 
#25 /src/vendor/zendframework/zend-servicemanager/src/AbstractPluginManager.php(161): Zend\ServiceManager\ServiceManager->get('Inquiry\Form\In...', true) 
#26 /src/vendor/zendframework/zend-form/src/FormElementManager/FormElementManagerTrait.php(38): Zend\ServiceManager\AbstractPluginManager->get('Inquiry\Form\In...', Array, true) 
#27 /src/module/Inquiry/src/Inquiry/Controller/Factory/InquiryControllerFactory.php(23): Zend\Form\FormElementManager\FormElementManagerV2Polyfill->get('Inquiry\Form\In...') 
#28 [internal function]: Inquiry\Controller\Factory\InquiryControllerFactory->createService(Object(Zend\Mvc\Controller\ControllerManager), 'inquirycontroll...', 'Inquiry\Control...') 
#29 /src/vendor/zendframework/zend-servicemanager/src/ServiceManager.php(934): call_user_func(Array, Object(Zend\Mvc\Controller\ControllerManager), 'inquirycontroll...', 'Inquiry\Control...') 
#30 /src/vendor/zendframework/zend-servicemanager/src/AbstractPluginManager.php(330): Zend\ServiceManager\ServiceManager->createServiceViaCallback(Array, 'inquirycontroll...', 'Inquiry\Control...') 
#31 /src/vendor/zendframework/zend-servicemanager/src/AbstractPluginManager.php(287): Zend\ServiceManager\AbstractPluginManager->createServiceViaCallback(Array, 'inquirycontroll...', 'Inquiry\Control...') 
#32 /src/vendor/zendframework/zend-servicemanager/src/ServiceManager.php(634): Zend\ServiceManager\AbstractPluginManager->createFromFactory('inquirycontroll...', 'Inquiry\Control...') 
#33 /src/vendor/zendframework/zend-servicemanager/src/ServiceManager.php(597): Zend\ServiceManager\ServiceManager->doCreate('Inquiry\Control...', 'inquirycontroll...') 
#34 /src/vendor/zendframework/zend-servicemanager/src/ServiceManager.php(530): Zend\ServiceManager\ServiceManager->create(Array) 
#35 /src/vendor/zendframework/zend-servicemanager/src/AbstractPluginManager.php(161): Zend\ServiceManager\ServiceManager->get('Inquiry\Control...', true) 
#36 /src/vendor/zendframework/zend-mvc/src/DispatchListener.php(94): Zend\ServiceManager\AbstractPluginManager->get('Inquiry\Control...') 
#37 [internal function]: Zend\Mvc\DispatchListener->onDispatch(Object(Zend\Mvc\MvcEvent)) 
#38 /src/vendor/zendframework/zend-eventmanager/src/EventManager.php(490): call_user_func(Array, Object(Zend\Mvc\MvcEvent)) 
#39 /src/vendor/zendframework/zend-eventmanager/src/EventManager.php(263): Zend\EventManager\EventManager->triggerListeners('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure)) 
#40 /src/vendor/zendframework/zend-mvc/src/Application.php(340): Zend\EventManager\EventManager->triggerEventUntil(Object(Closure), Object(Zend\Mvc\MvcEvent)) 
#41 /src/public/index.php(15): Zend\Mvc\Application->run() 
#42 {main} 
+0

を彼らは正しい? –

+0

これ以上の文脈がなければなぜこのエラーが発生するのかが分かりません。このエラーが発生した場所の工場コードとapplication.config.phpを表示してください。 –

+0

はい、申し訳ありませんが、私は昨日急いでしまったので、ソースコードを追加できませんでした。今私はそれを追加しました。 –

答えて

3

まずトラブルを知らせ、あなたのconfigローダーです。

'config_glob_paths' => [ 
     'config/autoload/local/{,*.}local.php', 
     'config/autoload/global/{,*.}global.php' 
    ], 

しかし、あなたのフォルダのように設定されています:あなたが含まれているためにそれを変更した

設定/自動読み込み/グローバル/ doctrine.php

ので、ローダーは一致しません。

このグロブパスは、ファイル構造のために働くだろう:

https://github.com/Saeven/doctrine-error/tree/master/src/config

で:

'config_glob_paths' => [ 
     'config/autoload/local/{,*.}php', 
     'config/autoload/global/{,*.}php' 
    ], 

代わりに、私はあなたを助けることができるより多くの「標準」設定のセットアップをアップロードしました短いですが、接続が確立されなかったため、悪いエラーが発生していました。なぜなら、単にDBの詳細が不在だったからです(あなたの設定ローダーが詰まっていたからです)。

第2に、あなたのcomposer.jsonがいくつかの互換性のない項目を読み込んでいるようです。私は維持プロジェクトから1を使用して、私は有効なDBのcredsを入れたときに、ローダの修正と組み合わせて、私は「テスト」を参照してください:どのようなデータベース接続の詳細について

composer.json

{ 
    "name": "test", 

    "minimum-stability": "dev", 

    "require": { 
     "php": ">=5.3.3", 
     "zendframework/zend-servicemanager": "@stable", 
     "zendframework/zend-eventmanager": "@stable", 
     "zendframework/zend-modulemanager": "@stable", 
     "zendframework/zend-developer-tools": "@stable", 

     "zendframework/zend-config": "@stable", 
     "zendframework/zend-console": "@stable", 
     "zendframework/zend-test": "@stable", 
     "zendframework/zend-crypt": "@stable", 
     "zendframework/zend-mail": "@stable", 
     "zendframework/zend-text": "@stable", 
     "zendframework/zend-serializer": "@stable", 
     "zendframework/zend-mvc": "2.5.3", 
     "zendframework/zend-filter": "@stable", 
     "zendframework/zend-db": "@stable", 
     "zendframework/zend-stdlib": "@stable", 
     "zendframework/zend-view": "@stable", 
     "zendframework/zend-form": "@stable", 
     "zendframework/zend-validator": "@stable", 
     "zendframework/zend-i18n": "@stable", 
     "zendframework/zend-log": "@stable", 
     "zendframework/zend-cache": "@stable", 

     "doctrine/doctrine-orm-module": "0.8.0", 
     "doctrine/orm": "2.5.*@dev" 
    } 
} 
+0

Hey Saeven、確かに自分のautloadディレクトリの設定が間違っています。しかし、それは主要な問題ではありませんでした。あなたが言ったように、composer.jsonファイルにはいくつかの互換性のない項目がロードされていますが、なぜそんなことは分かりませんか?あなたの必要な項目で問題はありません、すべて正常に動作します!いつもありがとう、私のレポなどを複製してください... –

+0

これは私の喜びですね、ねえ、私は良い賞金のために何かをしよう! ;)ZF2で幸運を祈る - ZF3もすぐそばにあります!また、あなたのスケルトンでServiceLocatorの警告に遭遇していることに気付きました。私はここであなたを助けるかもしれないブログの投稿を持っています:http://circlical.com/blog/2016/3/9/preparing-for-zend-f – Saeven

+0

ありがとうが、servicelocatorの呼び出しは、エラーを表示するだけだった。私は通常それをしない:) –

0

は、私はあなたの問題はあなたの工場で、どのようにあなたがEntityManagerを取得すると思います。ここで

はZF2工場でserviceLocatorからDoctrine\ORM\EntityManagerを取得する方法である:

class YourFactory implements FactoryInterface 
{ 

    public function createService(ServiceLocatorInterface $serviceLocator) 
    {    
     /* @var $em \Doctrine\ORM\EntityManager */ 
     $em = $serviceLocator->getServiceLocator()->get('em'); 

     // $em contains methods to get repo, etc ... 

     // injections here 
     $obj = new Obj(); 
     $obj->setEntityManager($em); 

     return $obj; 
    } 

} 

はそれを試してみて、私は

+0

これは問題ではありません。エンティティマネージャの登録サービス名は 'doctrine.entitymanager.orm_default'で、' Doctrine \ ORM \ EntityManager'はそのサービスのエイリアスでなければなりません。 –

+0

ここでZF2のノブを手伝ってもらえますか?このファクトリファイルをどこに置くべきか、ZF2にロードする方法を知りません。もう少し詳細を追加できますか? –

+0

@JohnYeatesこのファクトリ(ダミー)は一例です。どのファクトリも 'factories'セクションで設定ファイルを通してサービスマネージャーで宣言されなければなりません。 doc:https://framework.zend.com/manual/2.4/en/modules/zend.service-manager.quick-start.html – ceadreak

関連する問題