Laravel 8:将刀片加载到另一个刀片时未定义的变量

Posted

技术标签:

【中文标题】Laravel 8:将刀片加载到另一个刀片时未定义的变量【英文标题】:Laravel 8: Undefined variable when loading a Blade into another Blade 【发布时间】:2021-09-07 14:45:54 【问题描述】:

情况: 我正在制作一个通过从表(mysql)中获取数据来填充的侧菜单。 每个<li> 代表菜单的一项:

<li>item 1</li>
<li>item 2</li>
<li>item 3</li>

等等……

问题: 当我看到它的刀片时一切正常,但是当我将它包含在主刀片中时,它会抛出包含数据的变量 $all_items,使 &lt;li&gt; 无法识别 (Error: "variable not found error")

代码:

web.php

Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');
Route::get('items', 'MenuCmpItemsController@show');

MenuCmpItemsController.php

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\MenuCmpItems;
use DB;

class MenuCmpItemsController extends Controller

    public function show()
        $all_items = DB::table('tbClas-s-rooms')->select("room_number")->get();
        return view('items', ['all_items'=>$all_items]);
    

items.blade.php(访问 URL '/items' 时工作正常)

@foreach ($all_items as $item)
<li> $item->cmp_name </li>
@endforeach

现在我想在 auth.blade.php 中包含 items.blade.php,它包含以下侧边菜单结构:

<div class="collapse show" id="sidemenu">
  <ul class="nav">         
      @include('items')
  </ul>
</div>

但它会抛出

$all_items 未定义

我尝试了什么:

    我检查了它是否可能是其他东西,例如,我用文本替换了“$all_items”,并将文本加载到 auth.blade.php 中,所以看起来问题出在变量 $all_items

    我检查了如果

return view('items')->compact('all_items');

会有所作为,但不会。

非常感谢任何建议或想法。

【问题讨论】:

如何加载auth.blade.php 当你调用auth.blade.php时,你的Controller方法被调用了吗?不要这么想。可能想看看View Composers 您必须将@include('items', ['all_items'=&gt;$all_items]) 传递给包含 【参考方案1】:

您的文件夹结构是什么?在资源文件夹中

【讨论】:

【参考方案2】:

shaedrich 建议的解决方案应该可以解决您的问题。

@include('items', ['all_items'=>$all_items])

【讨论】:

以上是关于Laravel 8:将刀片加载到另一个刀片时未定义的变量的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 8将数据从控制器发送到刀片[重复]

为 Vue 使用 2 个不同的刀片根模板,以及 Laravel 8 和 Inertia?

在刀片 laravel 中定义变量

如何从 laravel 刀片加载 vuejs 组件?

Laravel:有啥方法可以在不编译的情况下加载刀片模板?

CSS 未加载到 Laravel 的刀片 (5.3)