Laravel 未定义变量:食物

Laravel 未定义变量:食物,laravel,Laravel,大家好,我需要帮助,我知道这看起来很简单,但我有点困惑,我的main.blade.php文件中有一个foreach循环,它显示了我数据库中的食物,它工作正常,但当它被点击时,它意味着指向个人帖子,这就是我得到错误的地方 未定义变量:食品 这里是main.blade.php文件中的我的foreach循环 @foreach($foods as $food) <li class="item"> <a href="{{ rout

大家好,我需要帮助,我知道这看起来很简单,但我有点困惑,我的main.blade.php文件中有一个foreach循环,它显示了我数据库中的食物,它工作正常,但当它被点击时,它意味着指向个人帖子,这就是我得到错误的地方 未定义变量:食品

这里是main.blade.php文件中的我的foreach循环

@foreach($foods as $food)  
    <li class="item">
        <a href="{{ route('Foods.show', $food->id) }}">
            <img src="{{ Storage::disk('local')->url('food_images/'.$food->image ) }}" class="img-responsive w-25 p-3" alt="Food" >
            <div class="menu-desc text-center">
                <span>
                    <h3> {{ $food->title }}</h3>
                    {{ $food->body }}
                </span>
            </div>
        </a>     
        <h2 class="white"> #{{ $food->price }}</h2>
    </li>
@endforeach
和heres Foods.show控制器功能

public function show($id)
{
    $foods = Food::Find($id);
    return view('foods.show')->withFood($foods);
}

请问我做错了什么

没有数据被传递到视图

这是向视图传递数据的方式:

public function LoadHome()
{          
    $foods = Food::orderBy('created_at','desc')->inRandomOrder()
        ->limit(12)
        ->get();
    return view('pages.home', ['foods' => $foods])
}
如果您总是想在main.blade.php中包含$foods,那么应该将其放在服务提供商中

View::share('foods', Food::orderBy('created_at','desc')->inRandomOrder()
        ->limit(12)
        ->get());


您是否尝试过使用如下方式将数据从控制器传递到视图:

public function show($id)
{
    $foods = Food::Find($id);
    return view('foods.show')->with('foods', $foods);
}
或者,如果要向视图传递多个变量:

public function show($id)
{
    $foods = Food::Find($id);
    $something = "else";
    return view('foods.show', compact('foods', 'something'));
}
您的视图不知道此时的
$foods
是什么,因此最好在循环之前检查foods是否已设置:

@if (isset($foods) && $foods->count() > 0)
    @foreach($foods as $food)
        ...
    @endforeach
@endif

有关更多信息,请参阅文档。

如果希望在视图中将变量命名为
foods
,则需要使用
with foods
而不是
with food

return view(...)->withFoods($foods);

正如其他答案中提到的,还有其他方法可以将数据传递给视图。

您应该将其设置为全局。将此代码放在您的服务提供商视图::share('data',[1,2,3]);用食物($foods)更改
->
->带('foods',$foods)哪个代码?为什么我必须将其设置为全局如果您希望变量为
foods
它将是
withFoods
而不是
withFood
顺便说一句,请删除这一行
$foods=Food::all()来自
LoadHome()
,无需调用。是的,我已经这样做了,这正是我将数据传递到视图中的方式感谢大家的帮助,已经解决了这个问题。问题出在食品非食品公共功能show($id){$foods=Food::Find($id);return view('foods.show')->withFoods($foods);}再次感谢\View::share('foods',Food::orderBy('created_at','desc')->inRandomOrder()->limit(12)->get();你是说我应该把它添加到我的AppSerivceProvider.php文件中,对吗@我试过这个。公共函数LoadHome(){$foods=Food::orderBy('created_at','desc')->inRandomOrder()->limit(12)->get();返回视图('pages.home',['foods'=>$foods])。它给出了相同的结果。感谢大家的帮助,已经修复了问题是关于食品而不是食品公共功能显示($id){$foods=Food::Find($id);返回视图('foods.show')->关于食品($foods);}再次感谢大家的帮助,已经修复了这个问题,它是关于食品而不是食品公共功能的show($id){$foods=Food::Find($id);return view('foods.show')->withFoods($foods);}再次感谢
return view(...)->withFoods($foods);