如何在Laravel中包含侧边栏以在所有页面上显示

时间:2019-05-03 11:30:52

标签: laravel laravel-5.2

我想显示一个侧边栏,该侧边栏显示我在Laravel中所有页面上的数据库数据,但是我一直收到此错误:

  

未定义变量:产品(查看:   C:\ xampp \ htdocs \ shop \ resources \ views \ pages \ sidebar.blade.php)(查看:

侧边栏

@extends('layouts.app')
<nav class=" d-none d-md-block bg-light sidebar">
    <div class="sidebar-sticky">
        <form>
            <div class=" input-group">
                <input class="form-control" type="text" placeholder="Search...">
                <button type="submit" class="btn btn-primary" value="search">Search</button>
            </div>
        </form>
        @foreach($products as $product)
            <span id="catName">{{ $product->name }}</span>
            <h2>No category to show</h2>
        @endforeach
    </div>
</nav>

控制器

public function index()
{
    $product = Product::get();

    return view('pages.sidebar', ['products' => $product]);    
}

路线

Route::resource('sidebar','SidebarController');

app.blade.php

<div class="col-md-4 col-lg-4 col-sm-12">
    @include('pages.sidebar')
</div>

2 个答案:

答案 0 :(得分:0)

您可以执行@include(),也可以通过控制器将其返回,但不能同时执行。我认为您可能对项目的结构有些困惑。

如果您使用的是@include,则不会碰到控制器。因此,从理论上讲,您需要在每种控制器方法中都包含['products' => $products]

这是我要怎么做:

sidebar.blade.php:

<nav class=" d-none d-md-block bg-light sidebar">
    <div class="sidebar-sticky">
        <form>
            <div class=" input-group">
                <input class="form-control" type="text" placeholder="Search...">
                <button type="submit" class="btn btn-primary" value="search">Search</button>
            </div>
        </form>
        @foreach($products as $product)
            <span id="catName">{{ $product->name }}</span>
            <h2>No category to show</h2>
        @endforeach
    </div>
</nav>

app.blade.php:

<div class="col-md-4 col-lg-4 col-sm-12">
    @include('pages.sidebar')
</div>

在pages文件夹内为主页创建一个新文件(或使用现有文件),我们将其称为home.blade.php

home.blade.php:

@extends('layouts.app')

将要在控制器中返回的视图更改为新的home.blade.php文件。

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HomeController extends Controller
{
    public function index()
    {
        $product = Product::get();

        return view('pages.home', ['products' => $product]);
    }
}

答案 1 :(得分:0)

我最后必须使用View Composer来解决此问题。谢谢