我正在使用 ZF2 作为另一个应用程序的组件。
我正在寻找一种在 init() 和 run() 调用之间设置应用程序的 URL 和视图模板的方法。我想要一种方法来修改 Request 和 Response 对象,或者使用不同的 URL 重新生成它们。
我目前使用 ob_start() 和 ob_get_clean() 以及一个简单地生成 the_content 的视图模板,从而将 ZF2 的输出注入到另一个应用程序的页面中。
任何有关方法的建议将不胜感激。
我正在使用 ZF2 作为另一个应用程序的组件。
我正在寻找一种在 init() 和 run() 调用之间设置应用程序的 URL 和视图模板的方法。我想要一种方法来修改 Request 和 Response 对象,或者使用不同的 URL 重新生成它们。
我目前使用 ob_start() 和 ob_get_clean() 以及一个简单地生成 the_content 的视图模板,从而将 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( );