2011-02-02 12 views
1

ここで私はZendが提供するものとは異なるコントローラのツリーを作りたいと思います。 私のプロジェクトの多くでは、コードの保守性の面ではトップではない1000行以上のコードを持つコントローラがあることがわかりました。だから私はコントローラを切ってみたい、つまり。はZend_Controller_Router_Interfaceを実装しています

例電流コントローラ:

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 

は、だから私は、切断のこのタイプを適用する方法を知りません。

アイデアを持っている人なら、私は興味があります。 ありがとうございます。

答えて

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; 
    } 
} 
0

は、お返事ありがとうございましたが、私は解決策がちょうどによってcustumルートを作成見つけます。 すなわち

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" 
関連する問題