Laravel's Blade 中的循环变量

Posted

技术标签:

【中文标题】Laravel\'s Blade 中的循环变量【英文标题】:Loop variables in Laravel's BladeLaravel's Blade 中的循环变量 【发布时间】:2018-05-26 03:43:54 【问题描述】:

我在 Laravel 的 Blade 模板中做了很多循环,有时我必须记住一些条件,比如 $found 或 $needToSave,诸如此类。

这是一个小例子:

<?php $found = false; ?>
@foreach ($users as $user)
    @foreach ($user->posts as $post)

        @if ($post->something == "value")
            <?php $found = true; ?>
        @endif

        @if ($loop->parent->last)
            @if ($found)
                I really found something! Do something special!
            @endif
        @endif

    @endforeach
@endforeach

现在,&lt;?php $found = false|true ?&gt; 部分是否有更好的方法? 对我来说,这似乎不干净,我正在寻找一个更清洁的解决方案,它与模板引擎一起发挥作用。我知道@php,但这对我来说似乎很丑陋。有什么可以在引擎中分配本地变量吗?

干杯

【问题讨论】:

你到底想做什么?您想知道是否有任何用户有任何具有特定价值的帖子吗?如果是这样,您应该考虑在控制器中执行此操作,甚至从中进行数据库查询。 嗯,是的,这也是我想到的 $found = false ,但我认为它会打印出一些东西,不是吗?如果没有,那就是我要找的! 你是对的!对不起!它只是返回变量,当我测试这个理论时我什至没有检查,因为我 dd()'ed 变量。 【参考方案1】:

如果以后不需要该变量,可以将代码重构为:

@foreach ($users as $user)
    @foreach ($user->posts as $post)
        @if ($loop->parent->last && $post->something === 'value')
            I really found something! Do something special!
        @endif
    @endforeach
@endforeach

如果你以后要使用它,你可以使用@php@endphp

在某些情况下,将 PHP 代码嵌入到视图中很有用。您可以使用 Blade @php 指令在模板中执行纯 PHP 块

https://laravel.com/docs/5.5/blade#php

【讨论】:

是的,正如我所写,我知道@php,但我正在寻找类似@local("found", "something") 之类的解决方案。 $post->something 只是一个例子。我运行的条件要复杂得多,需要时不时地保留一个标记。 @AndreasHerbert Blade 中没有这样的东西,所以最好使用@php 或者只是重构代码。

以上是关于Laravel's Blade 中的循环变量的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 7:foreach 循环中未定义的变量

循环遍历 Laravel Blade 模板中的嵌套数组

在带有 Blade 的 Laravel 4 中看不到内容视图中的变量

Laravel Blade 中的全局变量

未定义变量:Blade Laravel 7.x中的横幅

Blade - 将变量打印到变量中