【问题标题】:Using a Blade directive in a Blade directive在 Blade 指令中使用 Blade 指令
【发布时间】:2015-09-07 05:29:08
【问题描述】:

我正在使用 Laravel 5.1。我正在尝试将 Blade 指令 (@extend) 与我的自定义 Blade 指令一起使用。

Blade::directive('base', function() use ($theme) {
  return "@extends($theme)"
});

但是,上面的代码只是字面上显示的内容(@extends($theme)

【问题讨论】:

  • 你试过return "@extends(".$theme.")";
  • 不起作用。它只是输出整个东西
  • 不幸的是,刀片模板不会对编译后的视图进行第二次解析。如果不手动调用刀片编译器来运行第二个解析,这使得您正在做的事情很难完成。
  • @DavidBarker 是的,这就是答案。
  • @Ben 不太确定了,看起来应该很容易实现。

标签: laravel laravel-5 blade


【解决方案1】:

与我之前发表的评论相反,我认为使用刀片编译器这是可能的(但未经测试)。

Blade::directive('base', function() use ($theme) {
    return Blade::compileString("@extends({$theme})");
});

【讨论】:

  • 这似乎不适用于@yield 指令。有没有人让这个工作?
  • 就像你试图在指令中编译产量一样?
  • 我知道这是一个旧线程,但我刚刚开始在我的项目中使用您的解决方案,有趣的是它正在工作 - 但只有当我的自定义指令在通过调用的视图中使用时原生的@include 指令,但如果我尝试直接在视图中使用我的自定义指令,我会得到 WSOD...任何洞察为什么会这样?
  • 哦,很有趣,我记得它在 Laravel 5.1 中工作(我开始使用它很久了)。我还没有在 Laravel 5.3+ 中尝试过。我不明白为什么它不起作用,你检查过日志吗?
  • 我在 Laravel 5.8 中测试过,去掉return ..就用这个Blade::compileString() ....因为如果你用return ,它会执行两次。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-07
  • 1970-01-01
  • 2021-10-13
  • 2018-03-11
  • 2020-10-16
  • 2020-11-16
  • 1970-01-01
相关资源
最近更新 更多