6

Yii: организация backend для приложения

Posted апреля 12, 2010 in Yii and tagged , , by SpiRi7

При разработке любого веб приложения перед программистом стоит задача организации управления данными. Реализация административной части — backend приложения. В зависимости от сложности приложения backend может быть представлен одним контролером, выполнен в виде отдельного модуля или в виде отдельного приложения. Первые два подхода является простыми для понимания и не требуют подробного описания. Третий подход достаточно подробно описан в cookbook на официальном сайте Yii фреймворка. Рассмотрим еще один вариант организации — каждый модуль содержит в своем составе и методы для управления, административную часть.

Определимся с структурой. Каждый модуль может содержать контроллеры, модели, отображения. В том числе контроллеры могут располагаться в поддиректории основных контролеров. Пусть в папке admin будут находиться наши контроллеры для управления веб приложением.

При создании веб приложения на Yii используя консольную утилиту, все контроллеры наследуются от Controller, в котором определяется используемый layout, меню и т.п. Естественно для административной части нам необходимо использовать другой layout, и другие основные действия. Поэтому создадим новый экземпляр CController — AdminController.

class AdminController extends CController {
 
    public $breadcrumbs=array();
 
    public function init() {
        Yii::app()->layout = "backend";
    }
 
}

Как видно из кода мы используем layout — “backend”. Который мы размещаем в папку с темой для приложения /themes/classic/view/layout/backend.php
Все отображения административного функционала находятся в директории модуля, например так – /modules/modulename/views/admin/action/view.php
Таким образом мы можем произвести перегрузку любого отображения в папке с темой. Для указанного выше примера файла отображения, в папке темы должен быть выдержанна следующая структура.
/themes/classic/views/modulename/admin/action/view.php

Доступ к административной части модуля будет осуществляться по адресу
/module/admin/action/. Используя urlManager произведем переопределение используемых адресов.
Файл конфигурации, по умолчанию /protected/config/main.php

                'urlManager'=>array(
                    'urlFormat'=>'path',
                    'showScriptName'=>false,
                    'rules'=>array(
                            'admin/<_m:\w+>/<_c:\w+>/<_a:\w+>/*'=>'<_m>/admin/<_c>/<_a>',
                            'admin/<_m:\w+>/<_c:\w+>'=>'<_m>/admin/<_c>/index',
                            'admin/<_m:\w+>'=>'<_m>/admin/default/index',
                        )
                ),

Таким образом доступ к административному функционалу возможен по такому адресу
/admin/modulename/action — что является более наглядным.

Надеюсь эта заметка поможет Вас в организации ваших backend контроллеров. Буду рад любым предложениям и замечаниям.

Похожие посты:

6 Responses so far.

  1. otlichno пишет:

    spasibo. otlichno

  2. xoma пишет:

    Заметка действительно помогла! Сейчас как раз начал думать о системе подключаемых модулей и о том как эти модули будут администрироваться. Ваш вариант вполне работоспособен. Спасибо!

  3. SpiRi7 пишет:

    Спасибо. Подобная система используется в Magento, часть кода была взята из нее.

  4. ALex пишет:

    Спасибо, очень интересная статья!

  5. Konstantin пишет:

    Хорошая система, нравится что код распложен модульно, это удобно и приятно.

    Однако есть один минус – невозможно настроить свой defaultController для модуля в случаае админской части. Он его игнорирует, потому что если контроллер не указывается, то работает [module]/admin/default/index.

    Есть идеи как поменять?

  6. SpiRi7 пишет:

    Спасибо. Надо будет посмотреть подробнее на эту проблему.
    С urlManager я еще особо не разобрался. По идее хорошим тоном будет возможность задать default контроллер через конфигурационный файл, но как это сделать для меня пока это загадка.

Leave a Reply