Konfiguracja i środowiska

Typowe podejście do konfigurowania projektu stawia przed deweloperami wiele problemów:

  • Każdy programista w grupie ustala swoje własne opcje konfiguracyjne. Zapisywanie takiej konfiguracji może wpływać na resztę grupy.
  • Hasła baz produkcyjnych i klucze API nie powinny znajdować się w repozytorium.
  • Projekt wydawany jest zwykle na wielu środowiskach serwerowych: deweloperskim, testowym, produkcyjnym. Każde z nich powinno mieć oddzielną konfigurację.
  • Ustalanie wszystkich opcji konfiguracyjnych dla każdego przypadku z osobna jest procesem żmudnym i wysoce powtarzalnym i zajmuje zbyt wiele czasu.

Yii, dzięki prostej koncepcji środowisk, zapewnia rozwiązanie powyższych problemów. Każde środowisko jest reprezentowane przez zestaw plików w folderze environments. Środowisko jest inicjalizowane za pomocą komendy init, która kopiuje wszystko z folderu środowiskowego do głównego folderu, w którym znajdują się aplikacje.

Domyślnie zdefiniowane są dwa środowiska: dev i prod. Pierwsze jest środowiskiem rozwojowym, skonfigurowanym z wszystkim narzędziami deweloperskimi i włączonym modułem debugowania. Drugie przeznaczone jest do wydania projektu na serwerze i powyższe opcje są tam wyłączone.

Zwykle środowisko zawiera pliki skryptów wejściowych aplikacji jak np. index.php oraz pliki konfiguracyjne z przyrostkiem -local.php, które przechowują osobiste ustawienia programistów (zazwyczaj dla środowiska dev) lub też konkretne ustawienia serwerowe. Dla przykładu, połączenie do produkcyjnej bazy danych mogłoby znajdować się w pliku konfiguracyjnym -local.php środowiska prod.
Takie lokalne konfiguracje są dodawane do pliku .gitignore i nie umieszczane nigdy w źródłowym repozytorium kodu.

Aby uniknąć duplikowania ustawień, pliki konfiguracyjne nadpisują się. Przykładowo, front-end odczytuje konfiguracje w następującej kolejności:

  • common/config/main.php
  • common/config/main-local.php
  • frontend/config/main.php
  • frontend/config/main-local.php

Parametry są odczytywane w takiej kolejności:

  • common/config/params.php
  • common/config/params-local.php
  • frontend/config/params.php
  • frontend/config/params-local.php

Kolejny plik konfiguracyjny nadpisuje poprzednika.

Poniżej przedstawiony jest pełny schemat:

Advanced application configs