Zend framework2 ZF2设置自定义URL/路由和视图

Zend framework2 ZF2设置自定义URL/路由和视图,zend-framework2,request,bootstrapping,Zend Framework2,Request,Bootstrapping,我正在使用ZF2作为另一个应用程序的组件 我正在寻找一种在init()和run()调用之间设置应用程序的URL和视图模板的方法。我想要一种方法来修改请求和响应对象,或者使用不同的URL重新生成它们 我目前使用ob_start()和ob_get_clean()以及一个视图模板,该模板只生成_内容,从而将ZF2的输出注入到另一个应用程序的页面中 如果您对方法有任何建议,我们将不胜感激。例如,在Module.php中,您可以将事件附加到事件管理器 class Module { public f

我正在使用ZF2作为另一个应用程序的组件

我正在寻找一种在init()和run()调用之间设置应用程序的URL和视图模板的方法。我想要一种方法来修改请求和响应对象,或者使用不同的URL重新生成它们

我目前使用ob_start()和ob_get_clean()以及一个视图模板,该模板只生成_内容,从而将ZF2的输出注入到另一个应用程序的页面中


如果您对方法有任何建议,我们将不胜感激。

例如,在Module.php中,您可以将事件附加到事件管理器

class Module
{
    public function onBootstrap($e)
    {
        $eventManager        = $e->getApplication()->getEventManager();
        $serviceManager      = $e->getApplication()->getServiceManager();
        $eventManager->attach(MvcEvent::EVENT_ROUTE, function($e) use ($eventManager, $serviceManager){
            // your code here
        }, -1000);
    }
}
或者,您在控制器中的操作可以调度另一个操作并获得结果

行动方法:

$return = $this->forward()->dispatch('controllerName', array('action' => 'actionName', 'param1' => 'value', ...));

另一个应用程序中的以下代码可用于从应用程序外部设置调用URL和视图模板:

$bootstrap = \Zend\Mvc\Application::init( include( '/zf2/config/application.config.php' ) );
$event = $bootstrap->getMvcEvent( );

/* Modify the event with a custom request. */
$request = new \Zend\Http\Request( );
$request->setMethod( \Zend\Http\Request::METHOD_GET );
$request->setUri( $custom_url );
$event->setRequest( $request );

/* Modify the view. */
$event->getViewModel()->setTemplate('layout/custom-layout');

ob_start( );
$bootstrap->run( );
$html = ob_get_clean( );

对不起,我不是很清楚。我希望在将ZF2作为一个组件(从外部)处理时做到这一点。不一定是应用程序内部的。更具体地说,是通过路由找到正确的模块,并从应用程序实例中分派事件。这个(否则会很好地工作)解决方案有一个小问题:如果静态设置
$request->setMethod(\Zend\Http\request::METHOD\u GET)
要“获取”,您将无法在控制器中使用类似于
$request->isPost()
的方法,例如在处理表单时。所以我使用:
$request->setMethod($\u SERVER['request\u METHOD'])取而代之。