Php 如何从其他实例调用zend2实例

Php 如何从其他实例调用zend2实例,php,zend-framework2,Php,Zend Framework2,我有两个基于zend 2框架的应用程序,它们部署在同一台服务器上。 app1将向app2调用http请求。 为了提高性能,我想绕过http层,从代码中创建一个zend 2(app2)实例,然后重写它的请求并获得对变量的输出响应 以下是我的尝试: public function callAPIDirect($url, $params, $method = 'GET') { $app1_dir = getcwd(); chdir(APP2_PATH); require APP

我有两个基于zend 2框架的应用程序,它们部署在同一台服务器上。 app1将向app2调用http请求。 为了提高性能,我想绕过http层,从代码中创建一个zend 2(app2)实例,然后重写它的请求并获得对变量的输出响应

以下是我的尝试:

public function callAPIDirect($url, $params, $method = 'GET')
{
    $app1_dir = getcwd();
    chdir(APP2_PATH);
    require APP2_PATH . '/init_autoloader.php';

    $app2Configuration = require APP2_PATH . '/config/application.config.php';
    $app2SmConfig = isset($app2Configuration['service_manager']) ? $app2Configuration['service_manager'] : array();
    $app2ServiceManager = new \Zend\ServiceManager\ServiceManager(new \Zend\Mvc\Service\ServiceManagerConfig($app2SmConfig));
    $app2ServiceManager->setService('ApplicationConfig', $app2Configuration);
    $app2ServiceManager->get('ModuleManager')->loadModules();
    $app2ListenerFromAppConfig = isset($app2Configuration['listeners']) ? $app2Configuration['listeners'] : array();
    $app2Config = $app2ServiceManager->get('Config');
    $app2ListenerFromConfigService = isset($app2Config['listeners']) ? $app2Config['listeners'] : array();
    $app2Listeners = array_unique(array_merge($app2ListenerFromAppConfig, $conveyListenerFromConfigService));
    $app2 = $app2serviceManager->get('Application')->bootstrap($app2Listeners);

    $request = $app2->getRequest();
    $uri = new \Zend\Uri\Http($url);
    $queryString = $uri->getQuery();
    $request->setMethod($method);
    $request->setUri($uri);
    $request->setRequestUri($uri->getPath());

    $result = $app2->run();
    chdir($app1_dir);
    return $result;
}
但Zend framework的类似乎已经加载到app1中,而无法加载到app2中。此外,app2无法正确实例化


谢谢

不要尝试通过在一个ZF2应用程序中调度另一个ZF2应用程序来实现这一点。Zend\Mvc\应用程序不是无状态的,将无法执行此操作

最方便的情况是在应用程序之间使用消息传递。您可以使用包含代理的消息队列来回发送消息。您将消息从app1发送到代理,app2将在代理中侦听消息(反之亦然)


消息队列的两种经验证的技术是和。消息传递将使您的两个应用程序更具可扩展性、更好的可维护性,并将它们解耦。这些好处远远大于从一个应用程序直接调用php到另一个应用程序的(非常小的)速度增益。

您可以尝试使用命令行路由运行其他应用程序,看看会发生什么。。。