YAML – Načítání a Manipulace
Funkce pro práci s YAML soubory. Obal kolem Symfony\Component\Yaml s dodatečnou logikou pro stránky a error handling.
Přehled
Petrovo\Yaml poskytuje čtyři funkce pro:
- Načítání a parsování YAML souborů
- Konverzi polí na YAML formát
- Přeformátování souborů
- Slučování konfiguračních dat
Funkce
load()
Načte a parsuje YAML soubor.
use function Petrovo\Yaml\load;
// Základní načítání
$config = load('/app/config/settings.yaml');
// Bez .yaml přípony (přidá se automaticky)
$config = load('/app/config/settings');
// S override šablony
$config = load('/path/to/page', 'custom-template');
Podpis:
function load(string $filename, string $changeTemplate = ''): array
Parametry:
$filename- Cesta k souboru (s .yaml nebo bez)$changeTemplate- (Volitelně) Přepíše poletemplatev načtených datech
Vrací: Asociativní pole s parsovanými YAML daty, nebo prázdné pole pokud soubor neexistuje
Chování:
- Automaticky přidá
.yamlpříponu, pokud chybí - Pokud je soubor stránka (v cestě
/pages/) a má méně než 2 prvky: - Nastaví chybu do session:
$_SESSION['exit'] - Type:
page - Message:
Page [filename] not found or is empty.
Příklady:
// Načítání konfigurace
$settings = load('/config/session.yaml');
// Vrátí: ['gc_maxlifetime' => 1800, 'name' => 'PHPSESSID', ...]
// Načítání stránky s auto-error handling
$page = load('/pages/home');
// Pokud neexistuje nebo je prázdná, nastaví $_SESSION['exit']
// Override šablony
$page = load('/pages/contact', 'contact-form');
// $page['template'] bude 'contact-form' místo původní
dump()
Konvertuje PHP pole na YAML formát.
use function Petrovo\Yaml\dump;
$data = [
'title' => 'My Page',
'items' => ['one', 'two', 'three'],
];
$yaml = dump($data);
echo $yaml;
// title: My Page
// items:
// - one
// - two
// - three
Podpis:
function dump(array $array): string
Parametry:
- $array - pole k převodu
Vrací: YAML řetězec s 4-úrovňovou hloubkou a 2-mezerovou indentací
Chování:
- Pro indexovaná pole (klíče 0,1,2...): Vrátí jen hodnoty jako seznam
- Pro asociativní pole: Zachovává strukturu klíč-hodnota
- Formátování: 4 úrovně hloubky, 2-mezerové odsazení
Příklady:
// Asociativní pole
$data = ['name' => 'John', 'age' => 30];
echo dump($data);
// name: John
// age: 30
// Indexované pole
$data = ['apple', 'banana', 'cherry'];
echo dump($data);
// - apple
// - banana
// - cherry
// Vnořené struktury
$data = [
'user' => ['name' => 'John', 'email' => 'john@example.com'],
'items' => ['a', 'b'],
];
echo dump($data);
// user:
// name: John
// email: john@example.com
// items:
// - a
// - b
reformat()
Přeformátuje YAML soubor na konzistentní formát.
use function Petrovo\Yaml\reformat;
// Přeformátuje soubor a zapíše ho zpět
$success = reformat('/config/my-config.yaml');
if ($success) {
echo 'File reformatted';
} else {
echo 'File not found or write failed';
}
Podpis:
function reformat(string $file): bool
Parametry:
- $file - Cesta k YAML souboru
Vrací: true pokud byl úspěšně přeformátován, false pokud soubor neexistuje nebo zápis selhal
Chování:
- Kontroluje, zda soubor existuje
- Načte a parsuje jej pomocí
load() - Konvertuje zpět na YAML pomocí
dump() - Zapíše normalizovaný obsah zpět do souboru
Použití:
// Normalizace formátování
reformat('/app/config/session.yaml');
// Hromadné přeformátování
$files = glob('/app/config/*.yaml');
foreach ($files as $file) {
reformat($file);
}
joinTwo()
Sloučí dva YAML arraye kombinováním specifických polí a form_fields sekcí.
use function Petrovo\Yaml\joinTwo;
$base = [
'title' => 'Base Title',
'form_fields' => [
['name' => 'field1'],
['ADD_SECTIONS' => true], // Marker pro vložení
['name' => 'field2'],
],
];
$override = [
'title' => 'Override Title',
'header_new' => 'New Item',
'header_edit' => 'Edit Item',
'form_fields' => [
['name' => 'added1'],
['name' => 'added2'],
],
];
$merged = joinTwo($base, $override);
Podpis:
function joinTwo(array $y1, array $y2): array
Parametry:
$y1- Základní YAML pole (sloučí SE)$y2- Override YAML pole (sloučí Z)
Vrací: Sloučené pole
Chování:
- Zkopíruje pole z
$y2do$y1: titleheader_new-
header_edit -
Sloučí form_fields:
- Iteruje přes
$y1['form_fields'] - Když najde pole s klíčem
ADD_SECTIONS, vloží všechny$y2['form_fields']na to místo - Zachovává ostatní pole z
$y1
Příklad s form_fields:
$y1 = [
'title' => 'Original',
'form_fields' => [
['name' => 'field_a'],
['ADD_SECTIONS' => true], // Zde se vloží y2 fields
['name' => 'field_z'],
],
];
$y2 = [
'title' => 'Extension',
'form_fields' => [
['name' => 'field_x'],
['name' => 'field_y'],
],
];
$result = joinTwo($y1, $y2);
// Výsledek form_fields:
// [
// ['name' => 'field_a'],
// ['name' => 'field_x'], // z y2
// ['name' => 'field_y'], // z y2
// ['name' => 'field_z'],
// ]
Praktické použití:
// Sloučení base konfigu s custom fieldy
$baseForm = load('/app/cubes/default/data.yaml');
$customForm = load('/app/cubes/custom-override/data.yaml');
$merged = joinTwo($baseForm, $customForm);
// Nyní má custom pole v místě ADD_SECTIONS
Příklady
Načítání a Přeformátování
use function Petrovo\Yaml\load;
use function Petrovo\Yaml\reformat;
// Načti konfiguraci
$config = load('/config/database');
// Modifikuj
$config['debug'] = true;
// Zapíšu zpět (můžeš měnit přímo v souboru a pak přeformátovat)
// ...
// Přeformátuj na konzistentní formát
reformat('/config/database.yaml');
Výroba Konfigurace
use function Petrovo\Yaml\dump;
$newConfig = [
'server' => 'localhost',
'port' => 3306,
'username' => 'user',
];
$yaml = dump($newConfig);
file_put_contents('/config/database.yaml', $yaml);
Dynamické Slučování
use function Petrovo\Yaml\load;
use function Petrovo\Yaml\joinTwo;
// Načti base teplotu
$baseTemplate = load('/app/cubes/button/data.yaml');
// Načti override
$customTemplate = load('/app/cubes/button-extended/data.yaml');
// Sloučit s vložením custom fields
$finalTemplate = joinTwo($baseTemplate, $customTemplate);
// Použití v aplikaci
// ...
Integrace s Aplikací
V Cocks/Components
use function Petrovo\Yaml\load;
// Načtení cube typu
$cubeType = load(DIR . '/app/cubes/button/data');
// Načtení s override šablony
$cubeType = load(DIR . '/app/cubes/button/data', 'custom-button-template');
V Controlleru
use function Petrovo\Yaml\load;
use function Petrovo\Yaml\dump;
// Načtení konfigurace strany
$pageConfig = load('/pages/home');
// Modifikace a uložení
if ($modified) {
// ... změny v $pageConfig
file_put_contents($file, dump($pageConfig));
}
Chyby a Validace
Error Handling pro Stránky
Když load() detekuje, že je to stránka (v cestě /pages/) a soubor neexistuje nebo je prázdný:
$_SESSION['exit'] = [
'type' => 'page',
'message' => 'Page /pages/contact.yaml not found or is empty.',
'url' => 'https://example.com/contact',
];
Middleware pak zobrazí chybu.
Ruční Validace
use function Petrovo\Yaml\load;
$data = load('/config/my-config');
if (empty($data)) {
// Soubor neexistuje nebo je prázdný
throw new Exception('Configuration not found');
}
API Reference
| Funkce | Parametry | Vrací | Popis |
|---|---|---|---|
load() |
string, string |
array |
Načte YAML soubor |
dump() |
array |
string |
Konvertuje array na YAML |
reformat() |
string |
bool |
Přeformátuje YAML soubor |
joinTwo() |
array, array |
array |
Sloučí dvě YAML pole |