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

-> URL:

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

返信ありがとうございますが、カスタムルートを作成するだけで解決策が見つかります。すなわち。

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 に答える