Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Klasa Configurator, Narzedzie do obslugi plikow konfiguracyjnych
Prph
post
Post #1





Grupa: Zarejestrowani
Postów: 338
Pomógł: 2
Dołączył: 4.03.2006
Skąd: Łódź

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


Witam,

Pisze framework do wlasnych potrzeb. Planuje napisac PROSTA i uzyteczna klase do ladowania konfiguracji.

Moze macie z tym doswiadczenie?
Moje rozwiazanie w szkicu jest nastepujace:

  1. <?php
  2.  
  3. class Configurator
  4. {
  5.  
  6. public function getAttribute()
  7. {
  8. $aConfig = array // Tablica asocjacyjna konfiguracji
  9.  (
  10.  'Actions' => array
  11. (
  12. 'Error404' => array
  13. (
  14. 'security' => false,
  15. 'nextModule' => 'Test'
  16. ),
  17.  
  18. 'Default' => array
  19. (
  20. 'security' => false,
  21. 'nextModule' => 'Default2'
  22. )
  23. )
  24.  );
  25.  
  26. if(func_num_args() == 0) // Dostep do konfugiracji uzyskuje sie przez
  27. return null;  // liste parametrow do funkcji.
  28.  // Kolejne parametry, to kolejne węzły konfiga
  29.  
  30. $aArgs = func_get_args();
  31.  
  32. $aCurrentConfig = $aConfig;
  33.  
  34. foreach($aArgs as $sKey => $sAttributeName) // przechodzac przez kolejne elementy, zmieniamy "obecny węzeł"
  35. {
  36. if(isset($aCurrentConfig[$sAttributeName]))
  37. $aCurrentConfig = $aCurrentConfig[$sAttributeName];
  38. else
  39. return null; // jeżeli nie znalaziono podanego węzła, zwracamy null
  40. }
  41.  
  42. return $aCurrentConfig; // niby to array, ale jezeli chcemy dokladnie
  43. // wartosc ostatniego wezla, zwrocona zostanie
  44. // nie tablica, ale inna zmienna.
  45. }
  46.  
  47. public function hasAttribute() {}
  48. public function setAttribute() {}
  49.  
  50. public function saveConfiguration() {}
  51. }
  52.  
  53. $oConfigurator = new Configurator();
  54.  
  55. echo $oConfigurator->getAttribute('Actions', 'Default', 'nextModule');
  56. // zwroci "Default2".
  57.  
  58. ?>


Bede wdzieczny za wskazowki, radu, etc. Pozdrawiam, Adrian.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
arturwow
post
Post #2





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 26.10.2005

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


Ja na potrzeby swojego frameworka popełniłem takie coś

  1. <?php
  2.  
  3.  
  4. /**
  5.  * Moduł jądra do zarządzania konfiguracją
  6.  *
  7.  */
  8. class cConfig implements ArrayAccess
  9. {
  10. private $configuration = array();
  11.  
  12. /**
  13.  * Ładuje plik konfiguracyjny
  14.  *
  15.  * @param string $fileName
  16.  */
  17. public function load($fileName)
  18. {
  19. $data = new cConfigFile($fileName);
  20. $this -> configuration[$data -> section] = &$data;
  21. }
  22.  
  23. /**
  24.  * Implementacja ArrayAccess
  25.  */
  26. public function offsetExists($key)
  27. {
  28. return (key_exists($key, $this -> configuration));
  29. }
  30. /**
  31.  * Implementacja ArrayAccess
  32.  */
  33. public function &offsetGet($key)
  34. {
  35. return $this -> configuration [$key];
  36. }
  37. /**
  38.  * Implementacja ArrayAccess
  39.  */
  40. public function offsetSet($key, $value)
  41. {
  42. $this -> configuration [$key] = $value;
  43. }
  44. /**
  45.  * Implementacja ArrayAccess
  46.  */
  47. public function offsetUnset ($key)
  48. {
  49. unset($this -> configuration [$key]);
  50. }
  51. }
  52.  
  53. class cConfigFile implements ArrayAccess
  54. {
  55. private $sectionName;
  56. private $fileName;
  57. /**
  58.  * Tablica zawierająca konfigurację
  59.  *
  60.  * Tablica może być 'wielopoziomowa'
  61.  * 
  62.  * @var array
  63.  */
  64. private $params = array();
  65.  
  66. /**
  67.  * Konstruktor. Wczytuje plik konfiguracyjny do obiektu
  68.  *
  69.  * Sprawdza najpierw czy plik może nie jest już w cache,
  70.  * wtedy można ominąć powolne parsowanie pliku XML. 
  71.  * W przeciwnym wypadku wczytujemy plik i uruchamiamy parser
  72.  * XML.
  73.  * Użyłem fopen+fread, ponieważ z mojego benchmarka wyniklo, 
  74.  * że dla małych plików file_get_contens() jest wolniejsze.
  75.  *
  76.  * 
  77.  * @param string $fileName
  78.  * @todo działanie, gdy nie można odczytać pliku.
  79.  * 
  80.  */
  81. public function __construct($fileName)
  82. {
  83. if (is_readable($fileName))
  84. {
  85. $app = cKernel::getInstance();
  86. $cacheID = $app['cache'] -> makeFileID ('ConfigFile', $fileName);
  87. if ($app['cache'] -> cacheExists($cacheID) && _PHPEAX_CACHE_ON)
  88. {
  89. $data = &$app['cache'] -> fromCache($cacheID);
  90. } 
  91. else 
  92. {
  93. $file_handler = fopen($fileName,'r');
  94. $file = fread($file_handler,filesize($fileName));
  95. fclose($file_handler);
  96. $data = &$app['xml'] -> unserialize($file);
  97. if (_PHPEAX_CACHE_ON)
  98. {
  99. $app['cache'] -> toCache($cacheID, &$data);
  100. }
  101. }
  102. $this -> sectionName = $data ['section'];
  103. $this -> params = &$data ['config'];
  104. $this -> fileName = $fileName;
  105. }
  106. }
  107. /**
  108.  * Implementacja ArrayAccess
  109.  */
  110. public function offsetExists($key)
  111. {
  112. return (key_exists($key, $this -> params));
  113. }
  114. /**
  115.  * Implementacja ArrayAccess
  116.  */
  117. public function &offsetGet($key)
  118. {
  119. return $this -> params [$key];
  120. }
  121. /**
  122.  * Implementacja ArrayAccess
  123.  */
  124. public function offsetSet($key, $value)
  125. {
  126. $this -> params [$key] = $value;
  127. }
  128. /**
  129.  * Implementacja ArrayAccess
  130.  */
  131. public function offsetUnset ($key)
  132. {
  133. unset($this -> params [$key]);
  134. }
  135. /**
  136.  * Zapisuje konfigurację do pliku
  137.  * 
  138.  * Do przetestowania.
  139.  *
  140.  */
  141. public function save()
  142. {
  143. $app = cKernel::getInstance();
  144. $config = array();
  145. $config['section'] = $this -> sectionName;
  146. $config['config'] = $this -> params;
  147. $serialized = $app['xml'] -> serialize($config);
  148. file_put_contents($this -> fileName, $serialized);
  149. }
  150. /**
  151.  * Przeciążenie właściwości
  152.  * 
  153.  * cConfigFile::sectionName nie jest public, ponieważ
  154.  * ma być tylko do odczytu.
  155.  *
  156.  * @param string $property
  157.  * @return unknown
  158.  */
  159. public function __get($property)
  160. {
  161. switch (strtolower($property))
  162. {
  163. case 'section':
  164. return $this -> sectionName;
  165. break;
  166. default:
  167. return null;
  168. break;
  169. }
  170.  
  171. }
  172. }
  173. ?>


Przykładowy plik konfiguracyjny:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xml>
  3.      <section>global</section>
  4.      <config>
  5.            <homedir>/phpEAX/</homedir>
  6.            <language>
  7.                  <encoding>UTF-8</encoding>
  8.            </language>
  9.            <template>default</template>
  10.            <site>
  11.                  <title>..:: eax.pl Center ::..</title>
  12.                  <author>Artur Roszczyk</author>
  13.            </site>
  14.      </config>
  15. </xml>



Niedługo pokażę światu zalążek tego frameworka (jest już całkiem sporo (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ), tylko czekam na maila od autora OPT, ponieważ jest on wykorzystywany w moim partactwie :roll2:

A wogóle to witam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Jest to mój pierwszy post na tym forum (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował arturwow 9.07.2006, 12:49:36
Go to the top of the page
+Quote Post

Posty w temacie
- Prph   Klasa Configurator   30.05.2006, 15:29:02
- - NuLL   http://ez.no/doc/components/view/1.0.1/(fi...figur...   30.05.2006, 15:37:14
- - Cysiaczek   Osobiście, to mi się ten array nie podoba. Może je...   30.05.2006, 15:38:46
- - NuLL   Dostep tablicowy jest szybszy - nie ma sensu tworz...   30.05.2006, 15:42:37
- - Prph   No i jeszcze mozna wziac pod uwage to, ze niekonie...   30.05.2006, 15:51:02
- - Cysiaczek   A może pobierac dane tylko wtedy, gdy będzie taka ...   30.05.2006, 15:54:05
- - NuLL   Duzych plikow konfiguracyjnych sie nie tworzy. Duz...   30.05.2006, 15:54:37
- - Cysiaczek   No widzisz NuLL. Może jednak obiekty, bo zarządzac...   30.05.2006, 15:56:47
- - NuLL   Pokaz mi przewage obiektow nad tablicami Plusy pr...   30.05.2006, 15:58:46
- - Prph   Odnosnie obiektowego podejscia. Chodzi np o uzyska...   30.05.2006, 16:10:53
- - NuLL   Prph - da sie. Tylko po co ? Poczytaj o __get w m...   30.05.2006, 17:57:16
- - Prph   __get znam, ale umiem tylko jeden poziom odczytac....   30.05.2006, 21:18:47
- - hwao   zagniezdzasz pare obiektow i jedziesz po koleji po...   30.05.2006, 22:03:22
- - Prph   Tak myslalem.... Beznadziejnie Ma byc prosta Na...   31.05.2006, 06:18:33
- - arturwow   Ja na potrzeby swojego frameworka popełniłem takie...   9.07.2006, 12:46:20
- - Ociu   Najogólniej to zrobiłem to tak: [PHP] pobierz, pla...   10.07.2006, 08:38:00
- - Ludvik   Co do powyższego kodu - dziwnie według mnie napisa...   10.07.2006, 09:43:12
|- - Ociu   Cytat(Ludvik @ 10.07.2006, 10:43 ) Co do ...   13.07.2006, 07:58:12
- - Strzałek   Ja skorzystałem z ArrayAccess [PHP] pobierz, pla...   10.07.2006, 11:16:15
- - bigZbig   A ja proponuję zapoznać się z Zend_...   11.07.2006, 06:50:52


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 - 06:28