2013-09-19 3 views
0

Итак, я начал создавать панель администратора нашего сайта в качестве плагина. И я могу перенаправить каждый запрос, например domain.com/admin или domain.com/admin/users или domain.com/admin/pages/edit/5, на соответствующий контроллер и действие из плагина admin. Как это:CakePHP: создать глобальные маршруты для плагина admin

Router::connect('/admin', array('plugin' => 'admin', 'controller' => 'index', 'action' => 'index')); 
Router::connect('/admin/users/list', array('plugin' => 'admin', 'controller' => 'users', 'action' => 'list')); 

Но это означает, что я должен написать отдельный маршрут для почти каждого URL ??? или фактически - для каждого действия ... Итак - есть ли способ установить его глобально? ...

Например:

Router::connect('/admin/users/*', array('plugin' => 'admin', 'controller' => 'users')); 

Или еще лучше:

Router::connect('/admin/*', array('plugin' => 'admin')); 

Причина последних двух примеров не работает вообще ...

EDIT: CakePHP версия последней версии - 2.4.1.

+0

Всегда указывайте точную версию CakePHP, которую вы используете. – ndm

+0

Хорошо, я постараюсь запомнить ... :) ... и я редактировал свой вопрос;) ... –

ответ

1

Обычно вы не должны создавать такие маршруты для плагинов, основное отображение работает из коробки, то есть в случае, если ваш плагин назван admin, то /admin/users/list будет автоматически отображаться в плагин admin, контроллер users, действие list.

Исключением является ваш маршрут /admin, по умолчанию это будет искать index на AdminController. Таким образом, для отображения на index на IndexController вам нужен собственный маршрут, как в вашем вопросе:

Router::connect('/admin', array('plugin' => 'admin', 'controller' => 'index', 'action' => 'index')); 

Помимо этого, он должен работать как в случае, если у вас нет каких-либо других предыдущих правил, которые замещают поведение по умолчанию, например, Router::connect('/*', ...). В случае являются такие правила, и вы не можете изменить их, то это, как вы могли бы соединить основные маршруты вашего плагина:

Router::connect('/admin/:controller/:action/*', array('plugin' => 'admin')); 
Router::connect('/admin/:controller/*', array('plugin' => 'admin', 'action' => 'index')); 
Router::connect('/admin/*', array('plugin' => 'admin', 'controller' => 'index', 'action' => 'index')); 

Следует отметить, что это должно быть помещено перед тем другие маршруты, которые замещают поведение по умолчанию!

Смотрите также http://book.cakephp.org/2.0/en/development/routing.html

На стороне записки, list как имя действия, вероятно, не работать, это должно бросить синтаксической ошибке, как list является reserved keyword. Таким образом, вы на случай, если это не просто пример, вам понадобится дополнительный маршрут для этого, если вы хотите использовать /list в качестве имени действия в URL-адресе.

+0

Хм ... ну, это верно для контроллеров и действий ... действительно ... :) ... но для стартовой страницы панели администратора - это не ... ... так что если я попробую только domain.com/admin - а потом он попросит меня создать класс AdminController.php в Plugin/Admin/... –

+0

Правильно, я добавил нужный маршрут в примере кода, но забыл упомянуть, что он не является частью стандартной маршрутизации. Я уточню свой ответ. – ndm

Смежные вопросы