Как стать автором
Обновить

Комментарии 14

Обязательно пишите еще, интересно почитать, если даже в какой-то статье ничего полезного не найдется, то в следующей думаю, что-то да появится.
это конечно удобно, но всё-таки запрос в базу при каждом выполнении приложения для таких редко меняемых настроек — стоит ли?
Ну во первых можно настроить кеширование, а во вторых — у многих приложений не так много пользователей, чтобы создать реальную нагрузку на сервер.

В нашем конкретном случае — приложение рассчитано на использование в локалке, пользователей — порядка 10-15. Как разница, 10 или 20 запросов к БД будет происходить при каждом обращении к приложению.

Ну и наконец, Вы же понимаете, что я описал именно пример того как можно использовать такую страничку. Ведь помимо редко меняемых, в приложении может быть ещё сотня-другая настроек, которые надо периодически менять. Согласны?
Да, и так можно сделать. Но есть другой вариант — вынести параметры в отдельный файл, подключаемый в конфиг, и редактировать с помощью этой формы сам файл параметров.

P.S. Я не говорю, что какой-то подход лучше — везде есть плюсы и минусы. Действительно, для 10-15 пользователей — это вообще не страшно. Запрос скорее всего будет закеширован на уровне базы и о дополнительном кеше думать не надо даже.
Как-то так. Единственное, что мне не нравится — это строка вызова метода get
Уж слишком она длинная. К сожалению придумать как её укоротить я пока не могу.

Через компонент.
Yii::app()->config->get('applicationName');


Я не понял два момента:
1. Зачем нужен отдельный модуль, когда конфигурация нужна для админки, когда админка сама является(скорей всего) модулем?
2. Зачем нужно было делать надстройку над AR и Gii? Gii уже сам генерирует отличные функционал, используя ActiveRecord.
1) Просто так удобнее было оформить код
2) Меньше шагов для добавления нового поля. Вместо создания нового поля в БД и перегенерации модели и вьюшек, его нужно лишь описать в двух файлах и всё мгновенно заработает.
Если это модулем, то просто создать в модуле метод get, чтобы получилось вот так
Yii::app()->getModule('configpage')->get('applicationName');

А код самого ConfigpageModule.php
class ConfigpageModule extends CWebModule
{

    public function init()
    {
        $this->setImport(array(
            'configpage.models.*',
            'configpage.components.*',
        ));
    }

    public function beforeControllerAction($controller, $action)
    {
        if(parent::beforeControllerAction($controller, $action))
        {
            return true;
        }
        else
            return false;
    }

    public function get($name)
    {
        $this->config->get($name);
    }
}


Либо так:
ConfigpageModule::get('applicationName')

Тогда код будет такой:
public static function get($name)
{
    Yii::app()->getModule('configpage')->config->get($name);
}

Кстати да, про статический метод я почему то и не подумал. Большое спасибо за развёрнутый ответ!
>>Так что кипящие в соседних топиках дискуссии о постоянной нехватке квалифицированных кадров — какая-то глупость.
В том то и проблема что таких «спецов» уйма, а нормальных мало.
Я согласен, но просто адекватных и трудолюбивых людей ведь хватает. Взять, поучить ведь не проблема? Тем более php, господи что в нём учить =)
Если хотите реально сделать что-то полезное, то запилите crud для него через стд файлы конфигурации (чтобы в разных форматах можно было сохранять, например php array, yaml, xml, json), при этом не изобретите велосипед + добавьте версионность таких конфигов(например, dev, test, prod).
А еще надо бы релизить(packagist) все это, чтобы сообщество пользовалось Вашей наработкой. Возможно потом ее даже включат в стандартную поставку Yii, если там такого еще нет(я не слежу за этим фреймворком, в Sf2, например, есть такая страничка)

>>Так что кипящие в соседних топиках дискуссии о постоянной нехватке квалифицированных кадров — какая-то глупость.

Увы, я с Вами не согласен.

Сделал нечто подобное, только работает не с базой, а с отдельным конфиг-файлом.

Т.е. делаем config-файл (например, params.php), в нём параметры, которые можно будет изменить при помощи этой модели:
<?php

return array(
    'name' => 'Мой сайт',
    'params' => array(
        'adminEmail' => 'admin@example.com',
    ),
);


В модели прописываем attributeLabels и всё. Метод save() сохраняет модель в файл (да, с форматированием и отступами), специальный form-builder строит форму на основе CForm или CActiveForm.

Если сообществу интересно, то могу поделиться
Конечно интересно! Выкладывайте =)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации