这里我希望有一个不同于Zend提供的控制器树。 让我解释一下,在我的许多项目中,我发现自己的控制器有超过1000行代码,这不是代码可维护性的顶级方面。所以我想削减我的控制器,即
电流控制器示例:
UserController class extends Zend_Controller_Action {
listAction public function () {}
editAction public function () {}
.......
groupListAction public function () {}
groupEditAction public function () {}
.......
roleListAction public function () {}
roleEditAction public function () {}
.... etc.
}
因此,在这个例子中,我想将组和角色的概念外包给其他控制器和其他问题。
理想的架构:
- controllers /
- UserController.php
- User /
--- GroupController.php
--- RoleController.php
- >网址:
http://www.site.com/user/ -> class UserController
http://www.site.com/user_group/ -> class User_GroupController
http://www.site.com/user_role/ -> class User_RoleController
所以我不知道如何应用这种类型的切割。
如果有想法的人我很感兴趣。 提前谢谢。
答案 0 :(得分:0)
创建自定义控制器调度程序。类必须实现Zend_Controller_Dispatcher_Interface,或者您可以扩展Zend_Controller_Dispatcher_Standard。
最简单的方法是扩展Zend_Controller_Dispatcher_Standard,因为您只需要覆盖一些父方法。
class My_Dispatcher extends Zend_Controller_Dispatcher_Standard
{
public function isDispatchable(Zend_Controller_Request_Abstract $request)
{
// your code to find the correct class
}
public function loadClass($className)
{
// your code to load the correct class
// return the correct class name (e.g. User_RoleController)
}
public function getActionMethod(Zend_Controller_Request_Abstract $request)
{
// your code to find the correct method name
}
}
在引导程序中设置新的调度程序类:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
public function _initMyFrontController()
{
$this->bootstrap('frontController');
$frontController = $this->getResource('frontController');
$frontController->setDispatcher(new My_Dispatcher());
return $frontController;
}
}
答案 1 :(得分:0)
感谢您的回复,但我通过创建自定义路线找到解决方案。 EP>
routes.core_user_group_index.type = "Zend_Controller_Router_Route_Static"
routes.core_user_group_index.route = "admin/core/user_group"
routes.core_user_group_index.defaults.module = "core"
routes.core_user_group_index.defaults.controller = "user_group"
routes.core_user_group_index.defaults.action = "index"