Sistem podlog Blade v PHPju


Laravel za predstavitev podatkov privzeto uporablja svoj sistem podlog imenovan Blade ((Čeprav lahko uporabljamo katerikoli sistem (twig, smarty), tudi navaden PHP.)). Ta sistem po mojem mnenju ni slab, je pa dokaj preprost in zato dokumentacija zanj ni obsežna.

Je pa Blade razširljiv (razvidno z dna strani dokumentacije)! Tako lahko na primer ustvarimo filtre, ki jih razvijalci, ki jim Bladea ni všeč, tako pogrešajo. Čeprav priznam, da je ta način malo nekonvencionalen, če pogledamo druge sisteme podlog, kjer po istem kopitu določi fiter spremenljivkam. Blade razširitve je tako bolje uporabljati za določanje toka podatkov.

Ključno pri pisanju blade razširitev je poznavanje regularnih izrazov, saj blade pred obdelavo odgovora vse ključne besede pretvori v navaden PHP (pretvorjeni pogledi so shranjeni na lokacija app/storage/views), šele nato pa se stran obdela za odgovor. Tukaj delamo z nizi, ne z dejanskimi vrednostmi spremenljivk.

Primer

Blade razširimo s strukturo until, s katero dosežemo obdelavo elementov polja, dokler ti ustrezajo nekemu pogoju, nato ob prvi neizpolnitvi pogoja zanko prekinemo.

Potrebujemo @until in @enduntil znački.

// @until
Blade::extend(function($view)
{
    return preg_replace('/@until\((.*)\)/', '<?php if($1) { ?>', $view);
});

// @enduntil
Blade::extend(function($view)
{
    return preg_replace('/@enduntil/', '<?php } else { break; } ?>', $view);
});

Pri until moramo zajeti vsebino v oklepaju (pogoj za if blok), medtem ko pri enduntil blok zapremo ter v else bloku z break izstopimo iz zanke. Na koncu grajenje pogleda z dodanimi značkami s kontekstom zgleda nekako takole:

@foreach(range(0, 20) as $number)
    @until($number < 10)
        <p>{{ $number }}</p>
    @enduntil
@endforeach