Zend framework2 Zend Framework 2命令行脚本

Zend framework2 Zend Framework 2命令行脚本,zend-framework2,Zend Framework2,如何在Zend Framework 2中通过绕过所有MVC功能的命令行运行并执行php脚本,以便脚本能够访问由模块创建的资源,例如数据库连接或EntityManager 作为参考,这是我的entry point index.php的样子 <?php chdir(dirname(__DIR__)); require_once (getenv('ZF2_PATH') ?: 'vendor/ZendFramework/library') . '/Zend/Loader /Autoloade

如何在Zend Framework 2中通过绕过所有MVC功能的命令行运行并执行php脚本,以便脚本能够访问由模块创建的资源,例如数据库连接或EntityManager

作为参考,这是我的entry point 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();

模块有几个选项可用于配置资源,例如数据库连接。对于ZF2,和由条令本身维护,实体管理器仅在您想要使用它时创建。与在引导过程中创建数据库连接的ZF1方法不同,这些模块有一种即时性:在需要实例之前创建实例

因此:您需要在一个模块中配置连接和实体管理器,该模块由依赖项注入容器完成。该配置是由模块完成的,因此您应该注意正确配置模块。然后,在脚本中,从DIC中提取实体管理器,并实例化EM,这正是您需要的

如何配置模块?首先,加载模块,然后启动。这两个过程都是在调用
$moduleManager->loadModules()
中完成的,因为有几个侦听器侦听加载事件,因此实例化模块并为这些模块运行
init()
方法。还有一个侦听器用于获取模块配置,因此可以正确设置DI。此时,模块已设置,但并不总是准备好运行。准备的最后一步是引导,由
Zend\Mvc\Bootstrap
完成,引导
Zend\Mvc\Application

这意味着,如果复制index.php脚本,但只删除最后一行(
$application->run()->send()
),则会加载模块,配置DI容器并引导应用程序。现在,您可以从实体管理器获取DI定位器和图形:

$em = $application->getLocator()->get('doctrine_em');
请注意zf2的CLI功能,它将在下一个测试版中推出。此时,当准备好进行实验时,它将合并到zf2 master中。这使得CLI应用程序的构建更加容易。您只有一个入口点(例如app.php),而“真正的工作”就像是由控制器完成的HTTPMVC应用程序。一旦有了这个app.php,添加更多CLI功能将非常容易,因为它只需添加更多带有操作的控制器和(可能)到该点的路由即可