-1

Zend Framework 2.2.2 と Doctrine2 Module 0.7.0 を使用しています。

私の目標は、関数をスタンドアロンの php クラスのタスクに関連付けることです。私の現在のワークフローは、データの取得 -> データの変更と保存 -> データの送信という 2 つの異なるプログラムの間にあります。

このワークフローには、3 つの ZF2 モジュールの機能が必要です。1. ソース ソフトウェア モジュール 2. 内部ストレージ メカニズム モジュール 3. 宛先ソフトウェア モジュール

最初のタスクは成功しましたが、次のようにデータを 2 番目のモジュールに移動すると (メイン コードに縮小されます):

use MTNewsletterEngine\Controller\NewsletterEngineController;

/** @var  \MTNewsletterEngine\Controller\NewsletterEngineController */
private $_newsletterEngine;

$this->_newsletterEngine = new NewsletterEngineController();
[...]
$this->_newsletterEngine->addNewNewsletterRecipient($emailAddresses,1);

2 番目のコントローラーは、サービス ロケーターの取得に問題があります。

致命的なエラー: 51 行目の C:\xampp\htdocs\app\trunk\module\MTNewsletterEngine\src\MTNewsletterEngine\Controller\NewsletterEngineController.php の非オブジェクトに対するメンバー関数 get() の呼び出し

51 行目:

$em_mtnewsletterengine = $this->getServiceLocator()->get('doctrine.entitymanager.orm_mtnewsletterengine');

NewsletterEngineController は、モジュール MTNewsletterEngine のメイン コントローラーです。

解き方がわからないので困っています。ありがとう。

4

1 に答える 1

0

キーワードNewsletterEngineControllerを使用しての新しいインスタンスを作成しないでください。newServiceLocator は、この方法では作成されたオブジェクトに挿入されません。Zend\ServiceManagerを使用 してZend\Mvc\Controller\ControllerManager(エイリアス: "ControllerLoader" (ci))のインスタンスを取得し、getメソッドを使用してターゲット コントローラーをロードします。Zend\Mvc\Controller\ControllerManagerServiceManager 自体を拡張します (これはプラグイン マネージャーであるため)。

module.config.php を確認してください。コントローラーは、呼び出し可能なコントローラーとしてリストされている必要があります。

例:

'controllers' => array(
    'invokables' => array(
        'MTNewsletterEngine\Controller\NewsletterEngine' => 'MTNewsletterEngine\Controller\NewsletterEngineController'
    ),
),


$this->_newsletterEngine = $this->getServiceLocator()
        ->get('ControllerLoader')
        ->get('MTNewsletterEngine\Controller\NewsletterEngine');


詳細については、マニュアルを読み、 ServiceManager / ServiceLocator ( Zend\Diの一部) の仕組みを理解してください。

アプリケーションの構造についても考える必要があるかもしれません。そこで何をしようとしているのかはわかりませんが、さまざまなアプリケーション層を混同しているようです。

ドキュメント

http://framework.zend.com/manual/2.2/en/index.html#zend-di
http://framework.zend.com/manual/2.2/en/index.html#zend-servicemanager

于 2013-08-05T12:42:47.427 に答える