我有多模块应用程序的结构,但无法理解我如何注册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?