Создание пользовательской конфигурации CakePHP

#php #cakephp #cakephp-1.3

#php #cakephp #cakephp-1.3

Вопрос:

Я пытаюсь сохранить параметры конфигурации для своего приложения. Сохраняемые данные должны быть доступны во всем приложении, и их должно быть возможно обновить. Примеры деталей включают ссылку на изображение логотипа и контактные данные.

Я начал это с сохранения деталей в базе данных, создания модели и контроллера. Однако, поскольку логотип присутствует на каждой странице, для этого требуется запрашивать базу данных при каждой загрузке страницы.

Я читал о классе Configure, но я не могу заставить его работать. Кто-нибудь может объяснить, как я мог бы использовать Configure для хранения этих переменных конфигурации в файле, их чтения и обновления в файле. Я просмотрел кулинарную книгу и API, но это не очень понятно.

Ответ №1:

Вы можете перебирать таблицу настроек в beforeFilter app_controller, используя имя как способ записи настроек.

Вот так:

 <?php 
    $settings = Cache::read('AppSettings');

    if(!$settings){
        $settings = $this->Settings->find('all');
        Cache::write('AppSettings', $settings);
    }

    foreach($settings as $setting){
        Configure::write('Settings.' . $setting['Setting']['name'], $setting['Setting']['value']);
    }
?>
  

Итак, у вас будет база данных с полями id, name и value, где name — это то, что вы используете для получения своих настроек, а value — это значение, которое вы ожидаете от него.

Строка с полем ‘name’, имеющим значение «sitename», и полем ‘value’ со значением «MySite»

Может быть вызван с Configure::read('Settings.sitename'); помощью и вернет ‘MySite’

Затем в модели настроек вы вводите Cache::delete('AppSettings'); afterSave метод . Таким образом, кэш уничтожается при обновлении или добавлении записи, а настройки будут повторно кэшированы и перенастроены.

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

1. Очень хорошее решение @Kevin, но в вашем коде есть небольшая ошибка, в цикле foreach в функции Configure::write это должно быть $setting[][] (без конечных символов)