【问题标题】:Blade - How to @push content to start of a @stack?Blade - 如何@push 内容以启动@stack?
【发布时间】:2016-10-12 11:12:23
【问题描述】:

在刀片中,您可以创建堆栈。有关详细信息,请参阅以下内容:

https://laravel.com/docs/5.2/blade#stacks

然而,上面的链接只显示了如何将元素推送到堆栈的末尾。 我想将一个元素附加到堆栈的开头。我该怎么做?

例如

@push('foo')pizza @endpush
@push('foo')like @endpush
@push('foo')I @endpush
@stack('foo')

输出:

pizza like I

我希望它输出:

I like pizza

【问题讨论】:

  • 我认为它们只是为了对视图进行分组,对于类似的数组值,最好使用 array_pop

标签: laravel laravel-5 laravel-blade


【解决方案1】:

我不建议这样做,因为这是 Laravel 的构建方式。

但是,如果出于任何原因,您非常需要它并且您没有看到任何其他方式来完成它,您可以调整框架本身。

文件Factory.php 位于Illuminate\View。在那里你有一个名为extendPush()的函数,你可以通过替换行来更改“Append”方法:

$this->pushes[$section][$this->renderCount] .= $content;

用这个:

$this->pushes[$section][$this->renderCount] = $content . $this->pushes[$section][$this->renderCount];

在最后一个 else 语句中。

同样,我不建议调整框架,但如果它对您的项目如此重要,那么这就是我可以提供的。

【讨论】:

  • 很遗憾,Laravel 开发者忽略了技术含义,做了一个指令@stack 来实现队列。但是 Laravel 现在有一个 @prepend 指令,可以用来代替 @push 以使 @stack 按预期运行。
【解决方案2】:

您可以在任何地方在您的刀片中创建@stacks。如果您喜欢刀片中的页眉中的堆栈:

<head>
...
@stack('myScriptsAbove')
...
</head>

然后您可以将脚本从其他刀片推送到它。就像那个@push('myScriptsAbove)`。

【讨论】:

    【解决方案3】:

    就我而言,Parent-Blade 文件的 @push(...) 确实以某种方式附加在 Child-Blade 文件之后。

    但现在,我们可以简单地使用@prepend,比如:

    @prepend('css')
        <link href="{{ asset('css/app.css') }}" rel="stylesheet"/>
    @endprepend
    

    似乎在 Blade 中,@stack 的工作方式类似于 LIFO 队列(后进先出);

    所以,@push@prepend 都与我的预期完全相反。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-26
      • 2023-04-04
      • 1970-01-01
      • 2015-08-19
      • 2022-06-25
      • 2019-08-06
      • 1970-01-01
      • 2019-04-03
      相关资源
      最近更新 更多