Чтобы представить это на чистом PHP, вам нужно проверить storage/framework/cache/views и посмотреть, что там происходит. По сути, это то, что Blade компилирует в код PHP (вместо использования @ и с правильными вызовами функций).
Я могу думать так:
В вашем шаблоне, где вы используете yield:
<!-- template.php -->
<div class="container">
<!-- instead of using yield('container') -->
<?php echo "_yield:container"; ?>
</div>
В вашем файле вместо использования section и stop
<!-- view.php -->
<!-- instead of using extend('template') -->
<?php $templatePath = 'template.php'; ?>
<?php $sections = []; ?>
<!-- instead of using section('container') -->
<?php $currentSectionName = 'container'; ob_start(); ?>
<p>This will be in my container div</p>
<!-- instead of using stop -->
<?php
// get the current html
$sections["_yield:".$currentSectionName] = ob_get_contents();
ob_end_clean();
ob_start();
require($templateName);
$template = ob_get_contents();
ob_end_clean();
echo str_replace($template,array_keys($sections),array_values($sections));
?>
Конечно, такой подход в лучшем случае упрощен. Предоставленный код не предназначен для копирования и вставки, он больше похож на концепцию.
Все остальное просто:
@foreach($arr as $k=>$v)
...
@endforeach
переводится как
<?php foreach($arr as $k=>$v) : ?>
...
<?php endforeach; ?>
Именно так это делает BladeCompiler. То же самое с if и while.
person
Alex
schedule
04.09.2015