我想爲一個新的控制器設置不同的佈局,請提供一個理想位置的建議,以便通過控制器進行設置?現在我正在使用$this->layout()
在每一個行動。在ZF1中曾經有過preDispatch
,不確定它是如何在ZF2中實現的。爲Zend Framework 2控制器設置默認佈局的理想位置?
1
A
回答
3
控制器動作被調用時,每個控制器都會觸發事件dispatch
。此事件包含在包含某些標識符的EventManager
對象中。這使得SharedEventManager
可以通過具有特定標識符的EventManager監聽中的特定事件。
現在每個控制器(例如MyModule\Controller\FooController
)有兩個已知標識符:
- 類的名稱(
MyModule\Controller\FooController
) - 類(
MyModule
)
的頂級命名空間您的MyModule的Module.php類是放置此邏輯的最佳位置。當應用程序引導時,爲該模塊(即Module.php類的命名空間!)附加一個偵聽器,用於調度事件。這可以確保在調用控制器的操作時調用該函數,但在調度另一個控制器時監聽器不會執行。
namespace MyModule;
use Zend\Mvc\MvcEvent;
class Module
{
public function onBootstrap($e)
{
$app = $e->getApplication();
$em = $app->getEventManager(); // Specific event manager from App
$sem = $em->getSharedManager(); // The shared event manager
$sem->attach(__NAMESPACE__, MvcEvent::EVENT_DISPATCH, function($e) {
$controller = $e->getTarget(); // The controller which is dispatched
$controller->layout('layout/my-module-layout');
});
}
}
此方法(如何做與特定模塊內部控制器的東西)也以一個blog post of mine說明。由於模塊特定的佈局在Zend Framework 2中變得非常常見,因此Evan Coury爲此做了一個模塊。它被稱爲EdpModuleLayout,安裝模塊時相當容易。
您在配置中提供了一個MyModule
=>layout/template
的數組,然後該模塊處理剩下的部分。
相關問題
- 1. Zend Framework - 爲控制器設置沒有佈局
- 2. Zend Framework 2:使用MvcEvent設置佈局
- 3. Zend Framework中的默認主頁設置
- 4. 在Zend Framework 2中將默認編碼設置爲ISO
- 5. Zend Framework:設置默認響應部分
- 6. Zend Framework:如何附加默認佈局
- 7. 默認情況下沒有佈局的Zend Framework 2動作
- 8. Zend Framework 2設置默認值,如果輸入無效
- 9. 在Zend Framework 2中設置PHP設置
- 10. 我可以在MVC3基礎控制器上爲ViewResults設置默認佈局嗎?
- 11. 設置默認控制器或排除URL zend框架
- 12. Zend Framework 2骨架佈局
- 13. 設置默認的Magento頁面佈局
- 14. 如何設置控制器的佈局
- 15. 在MVC4中設置默認控制器
- 16. Zend Framework 2設置Zend \ InputFilter setRequired()
- 17. 在Zend Framework 2中爲不同的模塊設置不同的佈局?
- 18. 如何將相對佈局設置爲默認佈局
- 19. Zend SMTP默認設置
- 20. 如何設置控制器的默認區域設置
- 21. 設置佈局管理器
- 22. 從Bootstrap設置Zend佈局
- 23. 爲Zend Framework設置.htaccess
- 24. Zend Framework:佈局
- 25. 基本控制器的Zend Framework 2
- 26. Zend Framework中的默認用戶設置策略
- 27. 更改Zend Framework 2的默認模板解析器行爲
- 28. 設置Zend Framework - MVC
- 29. 更改Zend Framework 2.0控制器中的佈局
- 30. Zend Framework中控制器和佈局中的數據流
在這裏嘗試了一噸的例子,這是唯一的工作。最簡單的解決方法,謝謝 –