2012-12-03 57 views
4

有沒有辦法在zend framework 2中獲取當前視圖?如何獲得ZF2內部呈現的當前視圖

我相信這應該是可能與事件系統,但我似乎無法使它工作。

我要得到這個信息的原因是這樣我就可以自動包括具有相同名稱的.js文件,這會每次都我是一個行動中指定該規則節省了我的時間。

非常感謝, 湯姆

+0

你的意思是視圖或佈局?在什麼階段你需要這些數據? – michaelbn

回答

3

我不太清楚你渲染內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方法在動作之前自動調用。

1

謝謝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'); 
     } 
    }); 

再次感謝您指點我正確的方向。

相關問題