Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Sposób na GLOBALNY konfig aplikacji, Co o tym sądzicie?
LowiczakPL
post
Post #1





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

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


Witam

mam pytanie co sądzicie o takim sposobie rozwiązania na globalną konfigurację aplikacji

Klasa kontrolera konfiguracji
  1. <?php
  2.  
  3. namespace Core;
  4.  
  5. final class Config {
  6.  
  7. public static $config = array();
  8.  
  9. public static function getValue($module, $var) {
  10. if (isset(static::$config[$module][$var])) {
  11. return static::$config[$module][$var];
  12. }
  13. else {
  14. include_once('conf/conf.php');
  15. static::$config = $configs;
  16. return static::$config[$module][$var];
  17. }
  18. }
  19.  
  20. }



plik z konfiguracją

  1. <?php
  2.  
  3. switch (ENVIRONMENT) {
  4. case 'development':
  5. $configs['app']['url_website'] = 'http://testowa.rr/';
  6. $configs['app']['debug'] = 'on';
  7. break;
  8. case 'production':
  9. $configs['app']['url_website'] = 'http://mojadomena.pl/';
  10. $configs['app']['debug'] = 'off';
  11.  
  12. break;
  13. default:
  14. exit('Aplikacja nie działa poprawnie, ustaw tryb pracy.');
  15. }
  16.  
  17. $configs['app']['url_ogloszenia'] = $configs['app']['url_website'].'ogloszenia/';
  18. $configs['app']['router_rejestruj'] = 'rejestruj.html';
  19. ...
  20.  


Użycie konfiguracji w klasach

  1. <?php
  2. namespace Controllers;
  3.  
  4. use Helpers\Url;
  5. use Core\Config;
  6.  
  7. public function mojeKonto()
  8. {
  9. ...
  10. Url::redirect(Config::getValue('users','router_mojekonto'));
  11. }
  12.  


Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
vokiel
post
Post #2





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


Kilka uwag:
- Metoda getValue() nie sprawdza czy klucz istnieje po wczytaniu konfiguracji (blok else).
- Zmieniłbym nazwę getValue() na krótsze get() - wiadomo, że chodzi o wartość dla klucza.
- Rozbijasz parametry na $moule i $var - IMHO zbędne, ale jeśli już tak robisz, to każdy moduł powinien być innym plikiem konfiguracyjnym.
- W pliku konfiguracyjnym nie definiujesz na początku zmiennej $configs.
- W ogóle to zwracaj tablicę bez definiowania nazwy zmiennej (patrz przykład poniżej) i przypisuj ją przez
  1. static::$config = require_once('conf/conf.php');

- Proponuję rozszerzyć to o poszukiwanie w ścieżce, tak aby można było pobrać pojedynczy, zagnieżdżony element np:
  1. Config::get('users.default.account.name');


config.php
  1. <?php
  2. return [
  3. 'default' => [
  4. 'account' => [
  5. 'name' => 'test',
  6. 'email' => 'test@example.pl',
  7. ],
  8. 'other' => [
  9. 'foo' => 'bar',
  10. ],
  11. ],
  12. ];

- Ostatnia rzecz, proponuję pójść w kierunku DI zamiast globalnego singletona, dzięki takiemu podejściu testowanie będzie o wiele łatwiejsze.

Ten post edytował vokiel 14.05.2016, 11:19:55
Go to the top of the page
+Quote Post

Posty w temacie


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: 1.01.2026 - 04:03