Sympatyczny wynalazek, jakim jest YAML, jest używany w Symfony niemal na każdym kroku. I bardzo lepiej, bo to bardzo przyjazny człowiekowi format zapisu. Dokumentacja Symfony na temat YAML-a jest jednak dość lakoniczna i nie opisuje wszystkich jego możliwości. Jednym z pominiętych zagadnień są na ten przykład etykiety, które pozwalają zredukować ilość wklepywanych danych.
Etykiety najbardziej przydają się przy definiowaniu danych statycznych aplikacji (fixtures). Załóżmy, że tworzymy katalog usług hostingowych. Usługę VPS można opisać chociażby tak:
vps_hitme_openvz_128: &vps_hitme_openvz Company: hitme name: OpenVZ 128 Virtualization: openvz guaranteed_memory: 128 burstable_memory: 256 swap_memory: 0 disk_space: 20 uplink: 100 downlink: 100 bandwidth: 50 ip_4_addresses: 1 ip_6_mask: 64 root_access: true is_managed: false url: http://www.hitme.net.pl/openvz-details.php is_verified: true is_active: true
Kolejne pakiety różniące się od powyższego tylko nazwą, ilością dostępnej pamięci, powierzchnią dyskową i transferem można opisać o wiele krócej:
vps_hitme_openvz_256: <<: *vps_hitme_openvz name: OpenVZ 256 guaranteed_memory: 256 burstable_memory: 512 disk_space: 20 bandwidth: 100
Składnia i działanie etykiet w powyższym przykładzie są oczywiste, opiszę je jedynie dla porządku. Etykietę poprzedzamy znakiem &
. Dane oznaczone etykietą włączamy używając operatora <<
jako klucza, którego wartością jest nazwa etykiety poprzedzona *
. Spowoduje połączenie tablicy oznaczonej etykietą z bieżącą tablicą. Jeśli w obu tablicach występuje ten sam klucz to zostanie użyta wartość z bieżącej tablicy. Prawda, że przydatne?