【问题标题】:Laravel - Blade: @include a template with automated "filename-comment"Laravel - Blade:@include 一个带有自动“文件名注释”的模板
【发布时间】:2014-08-18 10:00:16
【问题描述】:

我想知道是否有一种方法可以包含模板,Blade 会自动在包含模板的开头写入带有文件名的 html 注释。这在具有大量模板的项目中可能会有所帮助。

例子:

// 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 年后实现一项功能。使用生成的 cmets,他将能够在浏览器中查看源代码并了解每个模板在项目中的位置。

【问题讨论】:

  • 这是什么意思,请澄清你的问题。
  • 我只是想在浏览器中查看源代码,并在项目文件夹中找到包含的模板的信息

标签: templates laravel blade


【解决方案1】:

这可以通过扩展 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')

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

【讨论】:

    猜你喜欢
    • 2014-12-10
    • 2018-03-22
    • 2021-09-18
    • 2018-04-17
    • 2015-06-08
    • 2013-07-01
    • 1970-01-01
    • 2013-07-21
    • 2015-05-01
    相关资源
    最近更新 更多