有沒有辦法在zend framework 2中獲取當前視圖?如何獲得ZF2內部呈現的當前視圖
我相信這應該是可能與事件系統,但我似乎無法使它工作。
我要得到這個信息的原因是這樣我就可以自動包括具有相同名稱的.js文件,這會每次都我是一個行動中指定該規則節省了我的時間。
非常感謝, 湯姆
有沒有辦法在zend framework 2中獲取當前視圖?如何獲得ZF2內部呈現的當前視圖
我相信這應該是可能與事件系統,但我似乎無法使它工作。
我要得到這個信息的原因是這樣我就可以自動包括具有相同名稱的.js文件,這會每次都我是一個行動中指定該規則節省了我的時間。
非常感謝, 湯姆
我不太清楚你渲染內ZF2當前視圖的意思,但在這裏是如何添加自動動作命名一個js文件。只要把這個在你的控制器:
public function onDispatch(MvcEvent $mvcEvent)
{
$renderer = $this->serviceLocator->get('Zend\View\Renderer\PhpRenderer');
$actionName = $mvcEvent->getRouteMatch()->getParam('action');
$jsFile = $actionName . '.js';
$baseUrl = $mvcEvent->getRouter()->getBaseUrl();
$renderer->headScript()->appendFile($baseUrl . '/js/' . $jsFile);
return parent::onDispatch($mvcEvent);
}
你可能需要調整你的js文件的位置和名稱當然代碼。 onDispatch方法在動作之前自動調用。
謝謝Wunibald,
你舉的例子非常完美,我已經修改了它下面,使之適用於每個控制器/模塊連接到一個事件。要做到這一點,我已經將它包含在我的Application模塊的onBootstrap函數中。
$events = StaticEventManager::getInstance();
$events->attach('Zend\\Mvc\\Application', 'dispatch', function(\Zend\EventManager\Event $event)
{
$baseUrl = $event->getRouter()->getBaseUrl();
$renderer = $event->getApplication()->getServiceManager()->get('Zend\View\Renderer\PhpRenderer');
$action = $event->getRouteMatch()->getParam('action');
$controller = $event->getRouteMatch()->getParam('controller');
if (strlen($controller) > 0)
{
list($module, $_null, $controller) = explode('\\', $controller);
$renderer->headScript()->appendFile($baseUrl . '/module/' . $module . '/view/' . strtolower($module) . '/' . strtolower($controller) . '/' . strtolower($action) . '.js');
$renderer->headScript()->appendFile($baseUrl . '/module/' . $module . '/view/' . strtolower($module) . '/' . strtolower($module) . '.js');
}
});
再次感謝您指點我正確的方向。
你的意思是視圖或佈局?在什麼階段你需要這些數據? – michaelbn