Laravel - Blade:@include 一个带有自动“文件名注释”的模板

Posted

技术标签:

【中文标题】Laravel - Blade:@include 一个带有自动“文件名注释”的模板【英文标题】:Laravel - Blade: @include a template with automated "filename-comment" 【发布时间】: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,他将能够在浏览器中查看源代码并了解每个模板在项目中的位置。

【问题讨论】:

这是什么意思,请澄清你的问题。 我只是想在浏览器中查看源代码,并在项目文件夹中找到包含的模板的信息 【参考方案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')

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

【讨论】:

以上是关于Laravel - Blade:@include 一个带有自动“文件名注释”的模板的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - Blade:@include 一个带有自动“文件名注释”的模板

@include Laravel Blade 模板以使用 Javascript 追加

Laravel - blade 基础语法和include的使用

Laravel Blade 模板部分重复/缓存错误

1+X web中级 Laravel学习笔记——blade模版

如何使用Laravel Blade模板呈现以下类型的表?