1

在这里,我想要一个不同于 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

所以我不知道如何应用这种类型的切割。

如果有人有想法我很感兴趣。先感谢您。

4

2 回答 2

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;
    }
}
于 2011-02-03T00:55:51.680 回答
0

感谢您的回复,但我只是通过创建自定义路线找到了解决方案。IE。

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"
于 2011-02-03T09:15:15.350 回答