Laravel Blade - html块的自定义方法?

时间:2016-01-12 17:34:17

标签: php laravel laravel-5 laravel-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>

有没有办法在刀片文件中提高可读性/可维护性:

@form-block('Title','Some content here')
   // Custom Block Here
@end-form-block

2 个答案:

答案 0 :(得分:3)

自定义刀片指令,因为它们被调用,写入有点脏,因为您必须返回包含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>
';
});

正如我所说,这很脏,但这会奏效。请注意,您不能在指令名称中使用破折号,这就是我将其称为formblockendformblock而不是form-blockend-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.phpviews/partials/form_block_end.blade.php中创建两个文件。在第一个中,您只能使用标题和内容作为变量$title$content。有关详细信息,请参阅https://laravel.com/docs/5.2/blade#control-structures

答案 1 :(得分:1)

您可以在刀片中编写自己的custom directives以执行任何操作。

您的示例看起来像是在尝试生成表单。 This is a package可能有所帮助。它是在Laravel 5中删除的表单/ html生成器,现在由社区支持。