我有一个“管理”模块,我希望它为“动态控制器”服务,即为实际上不存在的控制器(“虚拟控制器”)提供默认行为。
我发明了一种轻量级的消息传递机制,用于模块之间的松散通信。我想这样使用它,例如
?r=admin/users/index
被请求时,它会调用 AdminModule 的“虚拟控制器”“UserController”,默认情况下,它会使用这种消息传递机制来通知它可以响应请求的真实模块“UsersModule”。
我考虑过在 AdminModule::init() 中模拟这种行为,但那时我无法确定该动作是否可以由真实控制器处理,或者至少我不知道该怎么做。
这是因为 Yii 的工作方式:自下而上,控制器是渲染视图和应用程序布局(或模块,如果存在)的控制器。我认为该模块甚至没有关于处理给定控制器+动作的说法。
回顾一下,我正在寻找一种 CWebModule::missingController($controllerId,$actionId),就像 CController::missingAction($actionId) 一样,或者是一种模拟它的解决方法。
那可能在 CWebModule::init() 或我能找到的地方
- 控制器是否实际存在,在这种情况下,处理它是他的工作
- $actionID 和 $controllerID
- 模块 $controllerID 是否存在(我没有输入错误,在 r=admin/users/index 中,“users”是实际模块,在应用程序的配置中指定)。