【问题标题】:Laravel 8: Undefined variable when loading a Blade into another BladeLaravel 8:将刀片加载到另一个刀片时未定义的变量
【发布时间】: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('tbClassrooms')->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 未定义

我尝试了什么:

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

  2. 我检查了如果

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

会有所作为,但不会。

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

【问题讨论】:

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

标签: php laravel laravel-blade laravel-8


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-06-17
      • 2018-11-26
      • 1970-01-01
      • 2022-11-02
      • 1970-01-01
      • 1970-01-01
      • 2019-02-19
      • 2014-03-15
      • 2017-08-24
      相关资源
      最近更新 更多