Pracujemy na TemplateEngine utworzonym w poprzedniej lekcji. Dodamy do niego własną dyrektywę foreach, jak w Laravelu. Do dzieła.
Najpierw – aktualizacja templatepatterns.php:
<?php
return [
//(...)
[
"pattern" => '/@foreach\((.*)\)/',
"replace" => "<?php foreach($1) : ?>"
],
[
"pattern" => '/@endforeach/s',
"replace" => "<?php endforeach; ?>"
],
];
Teraz – sth4.php:
<h1>{{ $site_name }}</h1>
<ul>
@foreach($people as $person)
<li>{{$person->name}}</li>
@endforeach
</ul>
Sprawdzamy, jak to działa:
<?php
class TemplateEngine
{
//(...)
}
$template = new TemplateEngine(__DIR__, 'templatepatterns.php');
$template->addGlobal('site_name', 'MyApp');
$people = [
(object)['name' => 'John'],
(object)['name' => 'Jane']
];
echo $template->renderTemplate('sth4.php', ['people' => $people]);
Swoją drogą mamy tutaj kreację anonimowych obiektów bez klasy i konstruktora – rzutowaniem tablicy do object.
Ciekawostka, a zarazem konieczność, jeżeli chcemy się do name odnosić po strzałce, a tak mamy napisany sth4.php, plik templatkowy.