Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ZendFramework]Zend_Config_Ini a stałe
nospor
post
Post #1





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
likemandrake
post
Post #2





Grupa: Zarejestrowani
Postów: 175
Pomógł: 17
Dołączył: 23.06.2006

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
nospor
post
Post #3





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




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.
Go to the top of the page
+Quote Post
likemandrake
post
Post #4





Grupa: Zarejestrowani
Postów: 175
Pomógł: 17
Dołączył: 23.06.2006

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Hmmmm, w sumie to i racja (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Dzięki.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 01:13