Пользовательские блейд-директивы, как их называют, немного грязно писать, потому что вам нужно вернуть строку, содержащую HTML, а также, возможно, PHP-код, который будет запущен. Что еще более грязно, так это то, что вы не получаете параметры отдельно, вы просто получаете одну строку, например "('Title', 'Some content')"
, в качестве ввода для ваших директив. Уловка, которую я только что обнаружил, заключается в том, что вы можете использовать синтаксис массива для разделения параметров.
Blade::directive('formblock', function ($expression) {
return '
<section class="container-fluid container-fixed-lg form-block">
<div class="row b-b b-grey">
<div class="col-xs-12 col-md-3 m-r-35">
<h2><?=array' . $expression . '[0];?></h2>
<p><?=array' . $expression . '[1];?></p>
</div>
<div class="col-xs-12 col-md-7">
<div class="panel panel-default">
<div class="panel-body">
';
});
Blade::directive('endformblock', function () {
return '
</div>
</div>
</div>
</div>
</section>
';
});
Как я уже сказал, это грязно, но это сработает. Обратите внимание, что вы не можете использовать тире в именах ваших директив, поэтому я назвал их formblock
и endformblock
вместо form-block
и end-form-block
.
Более простой подход состоит в том, чтобы просто использовать директиву @include
для включения партиалов. Однако код, который вы должны написать в своих блейд-файлах, немного более подробный:
@include('partials.form_block_start', ['title' => 'My Title', 'content' => 'The extra content..']);
Main content...
@include('partials.form_block_end');
Затем создайте два файла в views/partials/form_block_start.blade.php
и views/partials/form_block_end.blade.php
. В первом вы можете использовать только заголовок и содержание в качестве переменных $title
и $content
. См. https://laravel.com/docs/5.2/blade#control-structures для получения дополнительной информации.
person
Jeroen Noten
schedule
12.01.2016