1

DB およびファイルシステム操作のセットを管理する Zend Framework モジュールを作成しました。私は 100% のテスト カバレッジ (模擬データベースを使用) を得ることができました。このモジュールのテスト環境への統合をテストしたいと思います。

現在、インターフェイスを実装していない /modules/MyModule/src/MyModule/Service/MyModuleService.php に Service クラスがあります。ドキュメントは、これが私がしなければならないことであることを示唆していません。

class MyModuleService
{
    public function doA(){...}
    public function doB(){...}
.....
}

デフォルトのアプリケーション スケルトンからアプリケーション フォルダ内の何も変更していません。多くのデータベースとファイルシステムの操作を行う Model クラスをコーディングしました。Service クラスは、最終的にこれらのアクションをトリガーしています。チュートリアルに従って基本的な構成を行った後、ZF ファイルシステムの外部でクラスにアクセスしようとすると、ZF がクラスを登録しないようです。

//dependencies for auto loader
require_once 'Zend/Loader/AutoloaderFactory.php';
use Zend\Loader\AutoloaderFactory;

//NEW registering the autoloader (as per Tomdarkness' response)
Zend\Loader\AutoloaderFactory::factory(array(
        'Zend\Loader\StandardAutoloader' => array(
            'autoregister_zf' => TRUE,
            'namespaces'      => array(
                'MyModule'=> '/path/to/zendframework/module/src/MyModule',
            )
        )
    )
);

//what factories are auto-loaded?
var_export(AutoloaderFactory::getRegisteredAutoloaders()); 

var_export は次を返すようになりました。

array(
    'Zend\\Loader\\StandardAutoloader' => Zend\Loader\StandardAutoloader::__set_state(
        array('namespaces'             =>
              array('Zend\\'         => '/usr/lib/zendframework/library/Zend/',
                    'MyModule\\'     => '/path/to/zendframework/module/src/MyModule/',
              ), 'prefixes'            => array(),
              'fallbackAutoloaderFlag' => FALSE,
        )
    )
);

私のmodule.phpでは、サービスを次のように宣言しています。

   /* Configure DB Service Managers */
    public function getServiceConfig()
    {
        return array(
            // ...
            'invokables' => array(
                'myModuleService'=> function ($sm){
                    $myModuleTable = $sm->get('MyModuleTable\Model\MyModuleTable');
                    return new MyModuleService($myModuleTable);
                }
            ),
    }

この自動ロードされたクラスから MyModuleService をインスタンス化するにはどうすればよいですか?

4

1 に答える 1