Autor wpisu: Jacek Skirzyński, dodany: 31.01.2014 23:08, tagi: php
Trochę czasu mineło od ostatniego i w końcu udało mi się znaleźć chwilę na opisanie kolejnych elementów Phinga – filtrów i maperów.
Filtry
Filtry pozwalają na wykonywanie różnych operacji na zawartości plików – na przykład usuwanie komentarzy z kodu. Wywołanie filtrów grupuje się w tagu <filterchain>
, przykład poniżej:
<copy todir="kopia" overwrite="true"> <fileset dir="."> <patternset refid="ogolne" /> </fileset> <filterchain> <stripphpcomments /> </filterchain> </copy>
Przykładowy kod definiuje operację kopiowania plików (zdefiniowanych w elemencie <patternset>
o ID: „ogolne” do katalogu „kopia”. Oprócz zwykłego kopiowania pliki są przetwarzane przez łańcuch filtrów. W tym wypadku zawierający jeden filtr, który usuwa z plików komentarze PHP.
W momencie pisania tego posta Phing dostarczał 19 wbudowanych filtrów, listę można znaleźć w dokumentacji. Natomiast z popularniejszych filtrów myślę, że należy wymienić:
ExpandProperties
– podstawianie wartości dla odwołań do zmiennych Phing;IconvFilter
– zmiana kodowania plików;ReplaceTokens
,ReplaceTokensWithFile
– podmiana „tokenów” zawartych w plikach na odpowiednie wartości;ReplaceRegexp
– podmiana wartości z wykorzystaniem wyrażeń regularnych.
Z praktycznego punktu widzenia filtry są bardzo przydatne, ale mogą powodować pewne problemy w połączeniu z systemem kontroli wersji – o tym co można poradzić napiszę w dalszej części.
Mapery
Efektem działania filtrów jest zmiana zawartości plików, natomiast mapery działają analogicznie, ale z nazwami plików. W momencie przygotowywania wpisu Phing dostarczał 6 maperów. W moim odczuciu najbardziej przydatne są:
GlobMapper
– podmiana nazw plików według prostych wzorców;RegexpMapper
– to samo, ale z wykorzystaniem wyrażeń regularnych we wzorcach.
Użycie maperów odbywa się w analogiczny sposób jak filtrów – w ramach jakiejś operacji plikowej (przykład zaczerpnięty z oficjalnej dokumentacji):
<copy todir="/tmp"> <mapper type="glob" from="*.php" to="*.php.bak"/> <fileset refid="someid" /> </copy>
Praktyczny przykład użycia
Za dobry przykład użycia Phinga (filtry, mapery) i systemu kontroli wersji uważam generowanie plików konfiguracyjnych projektu.
Idea opiera się na plikach o rozszerzeniu .dist
(kwestia umowna). Do systemu kontroli wersji trafiają pliki „szablonowe” (.dist
), tak żeby ich struktura mogła być śledzona. Z drugiej strony, aby nie zawierały konkretnych informacji (np. dostęp do bazy danych). W tych plikach zamiast wartości pojawiają się Phingowe odwołania do zmiennych. Utworzenie działającego pliku konfiguracyjnego polega na:
- skopiowaniu pliku
- zmianie rozszerzenia z
.php.dist
na.php
- podstawieniu wartości w miejsce wywołań zmiennych
Plik config/Config.php.dist
:
<?php class Config { const DB_HOST = '${config.db.host}'; const DB_NAME = '${config.db.name}'; const DB_USER = '${config.db.user}'; const DB_PASSWORD = '${config.db.password}'; }
Plik srodowisko.properties
: