Codeigniter HMVC и CMS

Я использую Codeigniter с расширением HMVC Modular и имею внутреннюю область CMS для управления контентом веб-сайта. Я перенаправляю базовый URL + «admin» (http://localhost/cms/admin) в методы контроллера. с префиксом «admin_».

e.g. function admin_index() {...}

А вот моя маршрутизация:

$route['admin/([a-zA-Z]+)/(:any)'] = "$1/admin_$2";
$route['^admin/(:any)(/)?'] = "$1/admin_index";
$route['^admin(/)?'] = "dashboard/admin_index";
$route['admin/logout'] = "login/admin_logout";

Теперь с HMVC маршрутизация не выполняется правильно. Вот что происходит:

URL: http://localhost/cms/admin/faqs
Directory: modules/faqs/controllers/faqs - index method
--
here is where it breaks
--
URL: http://localhost/cms/admin/faqs/categories
Directory: modules/faqs/controllers/faqs - categories method (does not exits)
Desired: modules/faqs/controllers/categories - index method

Как я могу использовать HMVC, сохраняя при этом «админку» сайта?


person Torez    schedule 09.02.2010    source источник
comment
Не для того, чтобы быть самым умным ребенком, но не было бы легче управлять и маршрутизировать, имея администратора в одном месте (например, admin контроллер и admin/faq в нем функции) и все остальное в другом месте?   -  person Adam Kiss    schedule 09.02.2010
comment
Цель HMVC - создать модульную структуру, в которой вы могли бы буквально забрать всю эту папку как есть и перетащить ее в другую установку, как модуль. То, что вы делаете, не сработает с тем, что я пытаюсь сделать. Однако, спасибо :)   -  person Torez    schedule 09.02.2010


Ответы (2)


Вы слишком усложняете жизнь, помещая функции внешнего интерфейса и внутреннего интерфейса в одни и те же контроллеры. Прочтите мою статью о о том, как создавать структура администратора в CodeIgniter.

person Phil Sturgeon    schedule 10.02.2010
comment
Я уже просматривал эту статью раньше, но просто пролистал ее. На первый взгляд, третий вариант, наверное, лучшее решение. Спасибо. - person Torez; 10.02.2010

Я работаю над чем-то похожим и реализовал замену, как и вы (3-й вариант), и все сработало нормально.

Я попытался реализовать фронт-контроллер для обработки раздела администратора и запуска модулей с HMVC modules :: run () и буферизации вывода по своему усмотрению, но затем я столкнулся с другой проблемой: вам придется изменить схемы URI с / to _ или что-то еще, так как вы не сможете отправлять сегменты модуля в качестве параметра на ваш контроллер, потому что CI полагается на "/" в качестве механизма маршрутизации.

Единственный способ - имитировать раздел администратора, как предложил Фил, но есть еще один вариант, позволяющий контролировать код, реализованный кем-либо, использующим вашу CMS.

Вы можете расширить CI_Controller (или MX_Controller, если вы используете HMVC) и добавить Admin_Controller, который будет обрабатывать вашу логику и контролировать, какие модули могут делать.

Взгляните на этот базовые классы CodeIgniter: сохранение СУХОЙ

person AchrafSoltani    schedule 07.12.2012