4

データベース接続やDoctrine EntityManagerなど、モジュールによって作成されたリソースにスクリプトがアクセスできるように、MVC機能のすべてをバイパスするZend Framework 2のコマンドラインを介してphpスクリプトを実行するにはどうすればよいでしょうか?

参考までに、これは私のエントリポイントindex.phpがどのように見えるかです

<?php
chdir(dirname(__DIR__));
require_once (getenv('ZF2_PATH') ?: 'vendor/ZendFramework/library') . '/Zend/Loader    /AutoloaderFactory.php';
Zend\Loader\AutoloaderFactory::factory(array('Zend\Loader\StandardAutoloader' => array()));

$appConfig = include 'config/application.config.php';

$listenerOptions  = new Zend\Module\Listener\ListenerOptions($appConfig['module_listener_options']);
$defaultListeners = new Zend\Module\Listener\DefaultListenerAggregate($listenerOptions);
$defaultListeners->getConfigListener()->addConfigGlobPath('config/autoload/*.config.php');

$moduleManager = new Zend\Module\Manager($appConfig['modules']);
$moduleManager->events()->attachAggregate($defaultListeners);
$moduleManager->loadModules();

// Create application, bootstrap, and run
$bootstrap   = new Zend\Mvc\Bootstrap($defaultListeners->getConfigListener()->getMergedConfig());
$application = new Zend\Mvc\Application;
$bootstrap->bootstrap($application);
$application->run()->send();
4

1 に答える 1

3

データベース接続など、モジュールがリソースを構成するためのオプションがいくつかあります。ZF2 の場合、DoctrineModuleDoctrineORMModuleは Doctrine 自体によって維持され、Entity Manager は使用したい場合にのみ作成されます。ブートストラップ中にデータベース接続が作成される ZF1 アプローチの代わりに、これらのモジュールには一種のジャストインタイムがあります。必要になる直前にインスタンスを作成します。

そのため、依存性注入コンテナーで行われるモジュールで接続とエンティティーマネージャーを構成する必要があります。その構成はモジュールによって行われるため、モジュールが適切に構成されていることに注意する必要があります。次に、スクリプトで DIC からエンティティ マネージャーをプルすると、EM がインスタンス化されます。必要なものだけです。

モジュールの設定方法は? まず、モジュールがロードされ、次に開始されます。$moduleManager->loadModules()複数のリスナーが load イベントをリッスンしているため、これは両方とも呼び出しで行われ、モジュールがインスタンス化さinit()れ、これらのモジュールのメソッドが実行されます。モジュール構成を取得するリスナーもあるので、DI を適切に設定できます。この時点で、モジュールはセットアップされますが、常に実行できる状態ではありません。準備が整う最後のステップは、によって行われるブートZend\Mvc\BootstrapストラップZend\Mvc\Applicationです。

つまり、その index.php スクリプトをコピーし、最後の行 ( )のみを削除する$application->run()->send()と、モジュールがロードされ、DI コンテナーが構成され、アプリケーションがブートストラップされます。これで、DI ロケーターを取得してエンティティ マネージャーを取得できます。

$em = $application->getLocator()->get('doctrine_em');

次のベータ版リリースの一部で導入される zf2 の CLI 機能に注意してください。RFC は現時点で準備ができており、実験の準備ができたら、zf2 マスターにマージされます。これにより、CLI アプリケーションの構築がはるかに簡単になります。1 つのエントリ ポイント (たとえば、app.php) があり、"実際の作業" は、コントローラーによって行われる http MVC アプリケーションのようなものです。この app.php があれば、CLI 機能を追加するのは非常に簡単です。これは、アクションと (場合によっては) そのポイントへのルートを含むコントローラーをいくつか追加するだけなので簡単です。

于 2012-02-24T14:46:35.067 に答える