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?