Блог Рагимова Романа

Создание панели управления в 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 использовал свое приложение, нам следует произвести следующие изменения в файлах:

Данный способ, особенно удобен для сайтов, где бэкэнд и фронтэнд оперируют разными объектами и нет необходимости использовать общие модели/библиотеки/помощники. В любом случае при использовании данного подхода вам будет достаточно сложно избежать дублирования кода, т.к. достаточно сложно представить себе сайт, где для бэкэнда и фронтэнда используются разные модели. Хотя, все, конечно, зависит от специфики сайта.

Вариант №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.

Ctrl