2016-02-12 98 views
1

我已經從骨架的應用程序開始,我試圖根據自己的喜好進行自定義。我不喜歡文件夾結構,因爲它似乎有很多冗餘/不一致。在ZF2中配置查看路徑

至於我現在的問題,我想保持我的一個結構中的所有觀點是這樣的:

├── module 
    ├── view 
     ├── controller 
      ├── action.phtml 

什麼骨架應用currenly的力量是這樣的:

├── module 
    ├── view 
     ├── module  [This is what I want to get rid of , it is redundant] 
      ├── controller 
       ├── action.phtml 

我看你有沒有配置選項:

'template_path_stack' => [ $dir . '/../view', ], 

但正如你可以看到它仍然假設目錄模塊存在聯合國該視圖文件夾。這是我想避免的。

還有一個模板地圖,但據我所知,它允許您操縱特定的路徑。我不想編輯此字段,並在地圖上添加一個新的觀點我每次添加一個新的動作時間

+0

嘗試使用'template_map'選項作爲'view_manager'配置的一部分。見[這裏](http://framework.zend.com/manual/current/en/modules/zend.view.quick-start.html#configuration) – Ankh

+0

你可以嘗試編寫你自己的'Resolver',實現'Zend \ View \ Resolver \ ResolverInterface'然後將其添加到'AggregateResolver' – marcosh

+2

它看起來可能是多餘的,但它確實有用。如果你有兩個模塊的控制器和動作命名相同,解析器將無法知道從哪個模塊渲染'controller/action.phtml'。模塊名稱的添加消除了這種不明確性。 –

回答

1

您可以編寫自己的實現的Zend的\的mvc \查看\ HTTP \ InjectTemplateListener

只需使用將原始代碼作爲基礎並刪除與第80行(在InjectTemplateListener :: injectTemplate)中的$ module有關的行。刪除:

$template = $this->inflectName($module); 

應該做你所需要的,但你可能會想要整理。然後用更高的優先級附上您實現比

在module.php在你的應用程序模塊

public function onBootstrap(EventInterface $e) 
{ 
    $eventManager = $e->getApplication()->getEventManager(); 

    $injectTemplateListener = new InjectTemplateListener(); 

    $eventManager->getSharedManager()->attach('Zend\Stdlib\DispatchableInterface', 
               MvcEvent::EVENT_DISPATCH, 
               array($injectTemplateListener, 
                'injectTemplate' 
              ), 
               -85 
    ); 
} 

或者你也許可以從發生在所有的,而不是覆蓋模板按停止原來的活動一個在上面