2011-02-02 2 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" 
Смежные вопросы