Laravel - Blade:@include一个带有自动" filename-comment"的模板。

时间:2014-06-27 10:12:56

标签: templates laravel blade

我想知道是否有办法以某种方式包含模板Blade会在包含的模板的开头自动编写带有文件名的html-comment。这对于包含大量模板的项目非常有用。

示例:

// file 1
<div class="bla">
  @include('folder.subfolder.templatename')
</div>

// file 2 ( folder/subfolder/templatename.blade.php )
<p>Lorem ipsum dolor sit amet</p>

// resulting file
<div class="bla">
  <!-- folder/subfolder/templatename.blade.php -->
  <p>Lorem ipsum dolor sit amet</p>
</div>

想象一下,开发人员需要在2年后实现一项功能。通过生成的注释,他将能够在浏览器中查看源代码,并了解每个temolate在项目中的位置。

1 个答案:

答案 0 :(得分:4)

这可以通过扩展Blade来实现,虽然它有点hacky。我认为laravel应该为扩展刀片提供更清晰的界面。

基本上我所做的就是扩展Blade并创建一个@commentinclude指令。包含的逻辑是从Laravels compileInclude() method中提取的。我刚刚添加了评论和前面的换行符。由于后引用包含整个控制结构(('viewname')的一些字符,我们需要先将它们删除。我还用/个字符替换了所有点

Blade::extend(function($view, $compiler)
{
    $pattern = $compiler->createOpenMatcher('commentinclude');
    $replace = '$1<?php echo "<!-- " . str_replace(["(\'", ".", "\'"], ["", "/", ""], "$2" ) . " -->\r\n" . $__env->make$2, array_except(get_defined_vars(), array(\'__data\', \'__path\')))->render() ?>';
    return preg_replace($pattern, $replace, $view);
});

用法示例:

@commentinclude('my.view.file')

我想知道是否有人可以提供更清洁的解决方案。