Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework]Zend_Config_Ini a stałe
Forum PHP.pl > Forum > PHP > Frameworki
nospor
Czy da sie w Zend_Config_Ini ustawić by parsował stałe? Przykładowo taki ini:
Kod
database.params.driver_options.PDO::MYSQL_ATTR_INIT_COMMAND =SET NAMES utf8

Nie zadziała mi poprawnie bo PDO::MYSQL_ATTR_INIT_COMMAND zostanie potraktowane jako tekst, a nie jako stała o wartosci 1002.
Musze napisac tak:
Kod
database.params.driver_options.1002 =SET NAMES utf8

By poprawnie zainicjalizowac obiekt bazy danych


ps: na necie znalazlem jak koleś dziedziczy swoją klasą po Zend_Config_Ini i sam parsuje te stałe, ale w to się bawić raczej nie będe
likemandrake
Zend_Config_Ini korzysta z funkcji parse_ini_file, a ta nie umożliwia tego czego chcesz, z resztą poczytaj jaki rodzaj stałych przetwarza ta funkcja.

Zend_Db i pochodnych również nie da się zmusić aby te ciągi tekstowe przetwarzała na odpowiadające im wartości liczbowe dla stałych PDO. Rozwiązaniem jest napisanie własnego skryptu, który takie ciągi tekstowe będzie odpowiednio przetwarzał.

Może przyda Ci się takie coś:

  1. <?php
  2. $options = array(
  3.    'ATTR_ERRMODE' => 'ERRMODE_EXCEPTION',
  4.    'ATTR_STRINGIFY_FETCHES' => true,
  5.    'inna_opcja' => 'wartosc'
  6. );
  7.  
  8. $newOptions = array();
  9.  
  10. $pdoRef = new ReflectionClass('PDO');
  11. $pdoConst = $pdoRef->getConstants();
  12.  
  13. foreach ($options as $key => $value) {
  14.    if (is_string($key) && array_key_exists($key, $pdoConst)) {
  15.        if (is_string($value) && array_key_exists($value, $pdoConst)) {
  16.            $value = $pdoConst[$value];
  17.        }
  18.        
  19.        $key = $pdoConst[$key];
  20.    }
  21.    
  22.    $newOptions[$key] = $value;
  23. }
  24.  
  25. print_r($newOptions);
  26. ?>
nospor
tak też myślałem że się nie da, ale łudziłem się nadzieją że może jednak w jakiś sposob Zend sobie z tym poradził...

dzieki za skrypcik.
likemandrake
Hmmm, czemu nie zdecydujesz się na napisanie własnej klasy, która dziedziczy po Zend_Config_Ini? Przecież to tylko kawałeczek dodatkowego kodu:

  1. <?php
  2. class My_Config_Ini extends Zend_Config_Ini {
  3.    protected $_staticSeparator = '::';
  4.    
  5.    protected function _processKey($config, $key, $value) {
  6.        if (strpos($key, $this->_nestSeparator) === false) {
  7.            if (defined($key)) {
  8.                $key = constant($key);
  9.            }
  10.            
  11.            if (strpos($value, $this->_staticSeparator) !== false && defined($value)) {
  12.                $value = constant($value);
  13.            }
  14.        }
  15.        
  16.        return parent::_processKey($config, $key, $value);
  17.    }
  18. }
  19. ?>
nospor
Hmmmm, w sumie to i racja smile.gif
Dzięki.
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.