За последние 24 часа нас посетили 215974 программиста и 2195 роботов. Сейчас ищут 1713 программистов ...

Где хранить настройки?

Тема в разделе "PHP для новичков", создана пользователем Koc, 25 май 2009.

  1. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    Вот есть куча настроек:
    выводить что-то по возрастанию
    использовать чпу/не использовать
    требовать подтверждение по мылу новых пользователей/не требовать
    время жизни кеша


    Как это все хранить, что б можно было изменять через админку?
    Можно в базе, можно в файлах. Как лучше?
     
  2. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Хранить в файлах личны мне больше нравится.

    1. какой выбор: ini, xml, yaml.
    2. всё-равно конфиг из БД рано или поздно будет кэшироваться. Так не один ли фиг?
    3. файлы проще редактировать напрямую. Порой полезная штука.
     
  3. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    lexa
    напрямую - это не через одминку?
     
  4. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    а мне нравится прямо массив хранить
    и работать удобно
    и изменять ручками можно
    var_export в помощь
     
  5. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    кстати сейчас некоторые настройки хранятся в виде массива или констант.
     
  6. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    вернемся к теме. Как настройки устанавливать?
    Напр. есть класс User. Его настройки хранятся в config/auth.php

    PHP:
    1. <?php
    2. // содержимое файла:
    3. // -----------------------------------------------------------
    4. // authTime и prolongAuth не обрабатываются, если используются сессии
    5. return array(
    6.     'cookieNames'  => array(
    7.         'id'   => 'id',
    8.         'hash' => 'hash'
    9.     ),
    10.     // хранить id и hash в сессиях или в куках
    11.     'useSesions'  => false,
    12.     // время, на которое запоминаем пользователя
    13.     'authTime'    => 60 * 60 * 24 * 10,
    14.     // продлевать или нет аутентификацию при каждом заходе
    15.     'prolongAuth' => true,
    16.     // привязывать пользователя к ip или user-agent
    17.     // yes/no/byUser
    18.     'bind'        => array(
    19.         'ip'        => 'byUser',
    20.         'userAgent' => 'byUser'
    21.     )
    22. );
    23. // -----------------------------------------------------------
    24.  
    25. /*
    26. Вариант 1:
    27. мы принудительно "скармливаем" классу настройки: */
    28. User::inctance(include 'contig/auth.php');
    29.  
    30. /*
    31. Вариант 2:
    32. класс в своем конструкторе сам их забирает:*/
    33.  
    34.     protected function __construct()
    35.     {
    36.         $this->db = Database::getInstance();
    37.         $this->users = Users::instance();
    38.        
    39.         $this->settings = Settings::get('user');
    40.     }
    41. // но до этого мы должны в начале скрипта задать пути к настройкам
    42. Settings::setPathes('user', 'config/auth.php');
    43.  
    Вариант 2 мне больше приглянулся. НО: например, мы одновременно можем подключаться к 2 разным базам: одна основная, вторая для сессий. И тут уж как ни крути, но мы должны "запихнуть" в instance настройки

    как быть?
     
  7. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Как быть с чем?

    Какая разница твоему User где у тебя хранятся сессии?
    Ему на это абсолютно фиолетово.
     
  8. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    ты не понял меня. Я имел в виду такое:
    PHP:
    1. <?php
    2. // пути настроек. Эти файлы мы из админки можем редактировать
    3. $pathes = array(
    4.     'database' => array(
    5.         'default'  => 'config/db.php',
    6.         'sessions' => 'config/db-sessions.php'
    7.     ),
    8.     'user'     => 'config/auth.php'
    9. );
    10. Settings::setPathes($pathes);
    11. // может быть несколько экземпляров этого класса
    12. class Database
    13. {
    14.     public static function setInstance($type = 'default')
    15.     {
    16.  
    17.         $settings = Settings::get('database', $type);
    18.     }
    19. }
    20.  
    21. class Session
    22. {
    23.     private $db;
    24.    
    25.     function __construct()
    26.     {
    27.         // вот сессии. У них своя база. Может быть даже на другом сервере
    28.         $this->db = Database::setInstance('sessios');
    29.     }
    30. }
    31. // а это мы создаем экземпляр основной базы. Настройки default
    32. $db = Database::setInstance();
    33. new Session;
    34.  
    вопрос исчерпан. Класс Settings в принципе дальше можно переписать так, что б он хавал и ini, xml. Была б необходимость.