Создание панели управления в CodeIgniter
Насколько мне известно, на данный момент, существует три основных подхода к созданию панелей управления при использовании CodeIgniter в качестве фреймворка. В данной статье я приведу примеры реализации каждого из этих подхода, а также плюсы и минусы их использования.
В данной статье я рассматриваю лишь общие подходы и не планирую в дальнейшем писать статью на тему «Как реализовать систему управления правами доступа».
Вариант №1 — «Несколько приложений»
Используя CodeIgniter вы можете достаточно легко организовать работу нескольких приложений использующих единую установку фреймворка. Данный метод реализуется простым копированием и переименованием 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
Как вы можете заметить, в данном примере мы просто создаем папку admin и копируем в нее index.php. Для того, чтобы каждый index.php использовал свое приложение, нам следует произвести следующие изменения в файлах:
-
index.php
$application_folder = "applications/frontend";
-
admin/index.php
$application_folder = "applications/backend";
Данный способ, особенно удобен для сайтов, где бэкэнд и фронтэнд оперируют разными объектами и нет необходимости использовать общие модели/библиотеки/помощники. В любом случае при использовании данного подхода вам будет достаточно сложно избежать дублирования кода, т.к. достаточно сложно представить себе сайт, где для бэкэнда и фронтэнда используются разные модели. Хотя, все, конечно, зависит от специфики сайта.
Вариант №2 — «Поддиректории»
Данный метод не требует особых настроек CodeIgniter и многие новые пользователи 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-схемы. Преимущество данного подхода заключается в возможности совместного использования моделей/библиотек/помощников как бэкэндом, так и фронтэндом. Если же у вас вдруг возникает отделить модели бэкэнда от моделей фронтэнда, вы всегда можете создать поддиректорию admin в директории models и размещать их в ней.
Основным недостатком данного метода является то, что при расширении сайта, структура каталогов и файлов будет усложнятся все больше и больше. Уже в примере выше, вы можете заметить, что у нас существует несколько папок для работы с блогом и комментариями, в то время, как по логике вещей, нам бы хватило и одной…
Вариант №3 — «Модули»
Для того, чтобы реализовать управление всем контентом в одной папке, нам стоит применить подход HMVC. По сути данный подход реализует модульность в CodeIgniter. На данный момент существует две реализации данного подхода — HMVC и Matchbox. Лично я предпочитаю последний, но, признаюсь честно, я просто не пробовал использовать HMVC.
Интересным является то, что для нашего примера большинство начинающих пользователей попытается создать модули — «блог», «комментарии» и «панель управления». Это кажется мне достаточно странным, особенно учитывая причину по которой мы используем модульный подход. В своих проектах я использую единственный admin.php в папке controllers, отвечающий за вход, выход и отображения главной панели управления. Панели же администрирования каждого отдельного модуля вынесены в admin.php внутри папки контроллеров этого модуля. Для организации «красивой» URL-схемы я использую роутинг.
/
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. Если же вас не устраивает такой URL, вы можете достаточно просто сделать его выдержанным в едином стиле, добавив следующие строки в router.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';
Применяя данный метод мы храним контроллеры бэкэнда и фронтэнда вместе, позволяя использовать общие модели/библиотеки/помощники, но при этом не «размазывая» все эти файлы по папке приложения. Ну и, конечно, красивые URL :-)
Итог
Если бэкэнд и фронтэнд разрабатываемого приложения не используют общих ресурсов и дублирование кода вас не пугает, то вариант №1 — ваш выбор. Если у вас небольшой сайт, который не планируется расширять и заигрывания с HMVC не стоят свеч, стоит использовать метод №2. Для больших же проектов сложно найти что-то более удобное, чем применение HMVC.
Данная статья является вольным переводом статьи «Create an Admin panel with CodeIgniter» авторства Phil Sturgeon.