使用Laravel的View Composer在变量中未返回数据

mxg2im7a  于 2023-06-30  发布在  其他
关注(0)|答案(2)|浏览(88)

我在Laravel中使用了View Composer,如下所示:

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\View;
use App\Models\Green;
use App\Models\Blue;

class SidebarServiceProvider extends ServiceProvider
{

    public function boot(): void
    {

       View::composer('layouts.sidebar', function ($view) {

            $dataGreen = Green::all();
            $dataBlue = Blue::all();

            $view->with([
                'green' => $dataGreen,
                'blue' => $dataBlue
            ]);

        });
    }
}

然后我将我的提供程序添加到数组中:

App\Providers\SidebarComposerServiceProvider::class,

但是当我尝试用@foreach返回一个数据时,我得到了下面的框架错误

Undefined variable $dataGreen
e4eetjau

e4eetjau1#

错误消息“Undefined variable $dataGreen”表示在使用@foreach迭代的视图中无法识别变量$dataGreen。要解决此问题,需要确保将变量正确传递给视图。
在您的SidebarServiceProvider类中,您正在向视图传递变量$绿色和$blue,而不是$dataGreen和$dataBlue。因此,您应该按如下所示更新视图合成器:

View::composer('layouts.sidebar', function ($view) {
    $dataGreen = Green::all();
    $dataBlue = Blue::all();

    $view->with([
        'green' => $dataGreen,
        'blue' => $dataBlue
    ]);
});

现在,在视图文件(layouts.sidebar)中,可以直接访问变量绿色和blue:

@foreach ($green as $item)
    // Access properties of $item
@endforeach

@foreach ($blue as $item)
    // Access properties of $item
@endforeach
c90pui9n

c90pui9n2#

这是因为定义的变量是$绿色和$blue,因为它们是你在视图编辑器中返回的名称,而不是函数中声明的变量。

相关问题