Laravel Blade - html 块的自定义方法?
Laravel Blade - custom method for html block?
是否可以创建自己的 blade method/tag 或者有什么解决方案?
例如在一个 blade 文件中,它将包含多个 form-block
块,如下所示:
<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>Title</h2>
<p>Some content here</p>
</div>
<div class="col-xs-12 col-md-7">
<div class="panel panel-default">
<div class="panel-body">
// Custom Block Here
</div>
</div>
</div>
</div>
</section>
有没有办法改进 readability/maintainability 在 blade 文件中有这样的东西:
@form-block('Title','Some content here')
// Custom Block Here
@end-form-block
你可以在 blade 中编写你自己的 custom directives 来做任何你想做的事情。
您的示例看起来像是在尝试生成表单。 This is a package 这可能会有所帮助。它是 form/html 生成器,已在 Laravel 5 中删除,现在受到社区的支持。
自定义 blade 指令,因为它们被调用,写起来有点脏,因为你必须 return 一个包含 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
指令来包含部分。但是,您必须在 blade 文件中编写的代码有点冗长:
@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。
是否可以创建自己的 blade method/tag 或者有什么解决方案?
例如在一个 blade 文件中,它将包含多个 form-block
块,如下所示:
<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>Title</h2>
<p>Some content here</p>
</div>
<div class="col-xs-12 col-md-7">
<div class="panel panel-default">
<div class="panel-body">
// Custom Block Here
</div>
</div>
</div>
</div>
</section>
有没有办法改进 readability/maintainability 在 blade 文件中有这样的东西:
@form-block('Title','Some content here')
// Custom Block Here
@end-form-block
你可以在 blade 中编写你自己的 custom directives 来做任何你想做的事情。
您的示例看起来像是在尝试生成表单。 This is a package 这可能会有所帮助。它是 form/html 生成器,已在 Laravel 5 中删除,现在受到社区的支持。
自定义 blade 指令,因为它们被调用,写起来有点脏,因为你必须 return 一个包含 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
指令来包含部分。但是,您必须在 blade 文件中编写的代码有点冗长:
@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。