FAQ:Создание админки на CI
Материал из Wiki
Содержание |
Создание админки на CI
Насколько я знаю, существует 3 метода создания админки с использованием CI. В этой статье я покажу примеры структур для каждого метода и расскажу о плюсах и минусах их использования.
Статья лишь в общих чертах описывает теорию создания админки и предлагает вам возможные стуктуры. Я не собираюсь писать очередную статью типа «Как создать систему авторизации и добавить в нее администраторов».
Итак, методы.
Два отдельных приложения
В CI вы легко можете запускать несколько приложений на одной установке CI просто используя копии файла index.php с другими именами.
/ |--applications/ | |--frontend/ | | |--controllers/ | | | |--home.php | | | |--blog.php | | | |--comments.php | | | | | |--models/ | | | |--blog_model.php | | | |--comment_model.php | | | | | |--views/ | | |--blogs/ | | | |--index.php | | | |--view.php | | |--comment/ | | | |--view.php | | |--index.php | | | |--backend/ | |--config/ | |--controllers/ | | |--dashboard.php | | |--blog.php | | |--comments.php | | | |--models/ | | |--blog_model.php | | |--comment_model.php | | | |--views/ | |--blogs/ | | |--index.php | | |--form.php | | | |--comment/ | | |--index.php | | | |--dashboard.php | |--login.php | |--system/ | |--index.php | |--admin/ |--index.php
Как вы видите, я поместил index.php в каталог admin/. Каждый файл index.php будет указывать на свой каталог внутри /applications, указать который можно следующим образом:
// index.php
$application_folder = "applications/frontend";
// admin/index.php
$application_folder = "applications/backend";
Так же, что бы система правильно строила путь к папке system из каталога admin, в admin/index.php замените:
$system_folder = "system";
на:
$system_folder = $_SERVER['DOCUMENT_ROOT']."/system";
Этот метод работает, но хорош лишь для больших сайтов, контент фронтэнда и бэкэнда (админки в нашем случае) которых сильно различается. Вы не сможете использовать одни и те же библиотеки, хэлперы, модели и прочее, что в свою очередь чревато появлением дублирующегося кода. Я не большой любитель такого разделения фронтэнда и бэкэнда, так как в большинстве сайтов админка использует одни и те же модели и один и тот же код. Но все это, конечно же, зависит от специфики вашего сайта.
Вложенные каталоги
Этот метод основан на привычной установке CI, он подойдет большинству новичков в CI на первое время.
/ |--application/ | |--config/ | |--controllers/ | | |--admin/ | | | |--blog.php | | | |--comments.php | | | | | |--blog.php | | |--comments.php | | | |--models/ | | |--blog_model.php | | |--comments_model.php | | | |--views/ | |--admin/ | | |--blog/ | | | |--index.php | | | |--form.php | | | | | |--comments/ | | | |--index.php | | | |--form.php | | | | | |--dashboard.php | | |--login.php | | | |--blog/ | | |--index.php | | |--view.php | | | |--comments/ | |--view.php |--system/ |--index.php
При таком подходе сохраняется привычная структура MVC. Для контроллеров мы используем вложенные каталоги, что дает нам вот такую структуру URL — http://example.com/admin/blog. У этого метода есть преимущество перед предыдущим: мы можем использовать одни и те же модели, библиотеки и хэлперы как в фронтэнде, так и в бэкэнде. Если вам на самом деле требуется разделить модели для фронт- и бэкэнда, почему бы просто не создать каталог models/admin/ и не поместить их туда?
Плохая новость в том, что когда ваш сайт начнет расширяться и требовать все больше контроллеров, код управления контентом, слабо связанный и раскиданный по корневому каталогу приложения, может оказаться настоящим геморроем. В примере выше вы можете видеть, что у нас создано по несколько каталогов для блога и комментариев, тогда как в идеале каталог должен быть один (один для блога и один для комментариев в данном случае). И этот один каталог называется модулем...
Модули
Чтобы весь наш код управления контентом находился в одном единственном каталоге, мы можем применить подход HMVC. Это означает иерархический MVC и дает нам модульный CI. Для достижения этих целей были созданы две системы: HMVC и Matchbox. Лично я предпочитаю последнюю, но учтите, что HMVC я ни разу не пробовал, так что выбор за вами.
Многие CI-разработчики делают странную вещь: создают модуль блога, модуль комментариев и модуль админки. Я в шоке от этого, потому что такое странное разделение на корню уничтожает всю идею использования модулей! Я использую единственный контроллер admin.php в основном каталоге контроллеров и с его помощью управляю главной страницей админки. Этот контроллер обрабатывает вход на сайт, выход и работает с панелью управления. Затем я в каждый модуль добавляю контроллер admin.php и настраиваю маршруты (URI Routing), чтобы добиться ссылок вроде http://example.com/admin/.
/ |--application/ | |--config/ | |--controllers/ | | |--admin.php | | | |--modules/ | | |--blog/ | | |--controllers/ | | | |--admin.php | | | |--blog.php | | | | | |--models/ | | | |--blog_model.php | | | | | |--views/ | | |--admin/ | | | |--index.php | | | |--form.php | | | | | |--comments/ | | |--controllers/ | | | |--admin.php | | | |--comments.php | | | | | |--models/ | | | |--comment_model.php | | | | | |--views/ | | |--admin/ | | |--index.php | | |--form.php | | | |--views/ | |--admin/ | |--dashboard.php | |--login.php | |--system/ |--index.php
При такой структуре чтобы попасть в админку, скажем, блога, вам нужно перейти по адресу http://example.com/blog/admin — симпатично, не правда ли? Нет? Тогда вы можете настроить маршруты в файле application/config/routes.php, чтобы поменять местами сегменты.
$route['admin/([a-zA-Z_-]+)/(:any)'] = '$1/admin/$2';
$route['admin/login'] = 'admin/login';
$route['admin/logout'] = 'admin/logout';
$route['admin/([a-zA-Z_-]+)'] = '$1/admin/index';
$route['admin'] = 'admin';
Таким образом, все контроллеры админки хранятся с контроллерами фронтэнда, вы можете использовать один и тот же код и при этом вы получаете весьма симпатичные адреса.
Резюме
Используйте 1-ый метод тогда, когда ваши фронт- и бэкэнд не содержат какого-либо общего кода и вы уверены, что никогда не будут. Используйте 2-ой метод, если у вас лишь несколько контроллеров, небольшой сайт и вам нет смысла возиться с HMVC. Используйте 3-ий метод в тех случаях, когда вы работаете с огромным модульным сайтом и вам необходимо использовать один и тот же код для фронтэнда и бэкэнда.
Оригинал статьи — http://philsturgeon.co.uk/news/2009/07/Create-an-Admin-panel-with-CodeIgniter