我有多模塊應用程序的結構,但無法理解我如何註冊Module.php中的一些路由並從一個模塊中激發事件並在另一個模塊中偵聽它。可能嗎?是否可以自動引導所有註冊的模塊?
0
A
回答
2
一些php框架在路由之前註冊所有模塊。例如,Zend Framework將遍歷每個註冊模塊並加載其引導信息。然後它將解析路線並執行目標控制器。好處是您可以在模塊之間進行分層mvc調用。缺點是如果你不打算對所有這些你自舉的模塊做任何事情,你會有很多開銷。
爲了簡化引導程序並加快載入速度,Phalcon框架在載入註冊模塊中的任何文件之前確定路徑。它不會在每個模塊中加載module.php文件,而只是加載位於將要執行的路徑路徑中的module.php文件。這裏的好處是速度。缺點是試圖跨模塊執行分層mvc。此時,phalcon只引導了路由模塊,因此不可知其他模塊。
實質上,這意味着您只能在當前模塊中執行hmvc請求。同樣,phalcon中的調度程序只能重定向到同一模塊中的控制器和操作。如果您需要轉到其他模塊,則可以使用響應 - >重定向操作執行301重定向。當然,這會產生一個全新的http請求,所以不適合hmvc模式。
擴展此功能的一種方法是註冊一組位於模塊外部的通用名稱空間。在最初的啓動順序從index.php文件開始,你可以加載這些命名空間:
$loader = new \Phalcon\Loader();
$loader->registerNamespaces(
array(
'Common\Controllers' => COMMON_PATH . '/controllers/' ,
'Common\Forms' => COMMON_PATH . '/forms/' ,
'Common\Models' => COMMON_PATH . '/models/' ,
'Common\Models\ViewHelpers' => COMMON_PATH . '/models/ViewHelpers/' ,
'Common\Plugins' => COMMON_PATH . '/plugins/' ,
)
);
// each module will register its own namespace separately
$loader->register();
return $loader;
在每個模塊中的Module.php引導文件,將添加額外的命名空間爲您的特定的模塊:
/**
* Register a specific autoloader for the module
*/
public function registerAutoloaders(){
$loader = new \Phalcon\Loader();
$loader->registerNamespaces(
array(
$this->_module_name . '\Controllers' => __DIR__ . '/controllers/' ,
$this->_module_name . '\Models' => __DIR__ . '/models/' ,
$this->_module_name . '\Forms' => __DIR__ . '/forms/' ,
)
);
$loader->register();
}
現在你有命名空間訪問調用在共同命名空間的類以及命名空間訪問類在當前模塊的名稱空間:
$common_model = new \Common\Models\MyModel();
$module_model = new \CurrentModuleName\Models\MyModel();
相關問題
- 1. 是否有可能使所有模塊隱式導入模塊?
- 2. 是否可以自動安裝node.js腳本所需的模塊?
- 3. 是否可以自動顯示所有文件的git註釋?
- 4. 是否可以在boost :: test上使用自動註冊的BOOST_PARAM_TEST_CASE?
- 5. 註冊從組件所有autofac模塊
- 6. 是否可以將模塊注入導入模塊的全局變量?
- 7. 節點JS - 模塊沒有自注冊
- 8. 綁定模塊沒有自行註冊
- 9. 錯誤:模塊沒有自我註冊
- 10. 錯誤:模塊沒有自注冊。
- 11. Python是否將模塊路徑中的所有模塊導入?
- 12. 是否可以自動將用戶包含到所有模板?
- 13. React-Native:模塊AppRegistry不是已註冊的可調用模塊
- 14. 模塊AppRegistry是未註冊的可調用模塊(調用runApplication)
- 15. React-Native:模塊RCTLog不是已註冊的可調用模塊
- 16. 使用'RegisterWindowMessage'註冊的消息是否可以取消註冊?
- 17. 是否autofac初始化應用程序引導的所有註冊組件?
- 18. 是否可以告訴IDLE python shell每次啓動時自動導入模塊?
- 19. 他們是否註冊所有Openids?
- 20. 沒有npm的反應 - 是否可以導入庫/模塊?
- 21. 安裝文件是否自動註冊?
- 22. 有沒有辦法遍歷所有可以導入的模塊
- 23. 是否可以在WordPress網站註冊RSS訂閱的網站的所有者?
- 24. 是否可以查看註冊到StructureMap的所有服務/類型?
- 25. django註冊模塊
- 26. 檢查AngularJS模塊是否被引導
- 27. 是否可以爲單個車把模板註冊助手?
- 28. 自解壓Zip文件是否可以讀取註冊表項?
- 29. 是否有可能在Python中的「導入模塊」中獲得「導入模塊」?
- 30. 是否有可能收聽MBeanServer以註冊新的Bean?