Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] Dynamiczny konfig
Forum PHP.pl > Forum > PHP > Frameworki
mrjozo
Witam,



Załóżmy, że mam sobie forum, jest tam mnóstwo opcji: ile postów na strone, ile tematów na strone, ile najnowszych (dla prostoty zakładamy, że są to ustawienia globalne a nie per user) 

Jak najlepiej zrobić aby te ustawienia dało się zmieniać przez backend?

Czy robić edycję pliku app.yml, czy może trzymać to w bazie (opt_name,opt_value) - jednak pytanie za każdym razem bazy nie byłoby chyba zbyt wydajne?

Może są jakieś sprawdzone sposoby radzenia sobie z takimi rzeczami?

// może być również rozwiązenie per user - ale tutaj chyba tylko baza?
Whisller
Osobićie napisał bym filtr który przy pierwszy wywołaniu pobiera te dane (tylko raz) i ustawia je w sesji użytkownika, później już pozostaje tylko odczytanie ich i przekazanie do modelu już z sesji a nie bazy.
Cysiaczek
Co do cache, to nie wiem, bo sam się zastanawiam, ale jeśli chodzi o sam konfig, to po prostu łączę tablicę sfConfig z konfigiem z bazy nadpisując istniejące klucze. Wszystko w filtrze.
Kod
app_config:
    _attributes { phpName: AppConfig }
    id:
    category:     { type: varchar, size: 255, default: default }
    key:          { type: varchar, size: 255, unique: true }
    value:        { type: varchar, size: 255 }
    display_name: { type: varchar, size: 255 }
    info:         { type: longvarchar }
    is_special:   { type: boolean, default: false }
    is_active:    { type: boolean, default: true }


  1. <?php
  2. class AppConfigPeer extends BaseAppConfigPeer
  3. {
  4.    static function getAll()
  5.    {
  6.        $sql="SELECT c.* FROM ".AppConfigPeer::TABLE_NAME." c";
  7.        return self::load($sql);
  8.    }
  9.    
  10.    static function getAllActive()
  11.    {
  12.        $sql="SELECT * FROM ".AppConfigPeer::TABLE_NAME."  WHERE ".AppConfigPeer::IS_ACTIVE."=1";
  13.        return self::load($sql);
  14.    }
  15.    
  16.    public static function load($sql)
  17.    {
  18.        $config=array();
  19.        $con = Propel::getConnection(null);
  20.        $stmt = $con->createStatement();
  21.    $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_NUM);
  22.    $rs->setFetchmode(1);
  23.       while($rs->next()) {
  24.        
  25.            $data=$rs->getRow();
  26.            $config[$data['key']]=$data['value'];
  27.        }
  28.        return $config;
  29.    }
  30. }
  31. ?>


Pozdrawiam.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.