【问题标题】:How to include a sidebar in Laravel to show on all pages如何在 Laravel 中包含一个侧边栏以显示在所有页面上
【发布时间】:2019-05-09 17:28:01
【问题描述】:

我想在 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>

【问题讨论】:

    标签: laravel laravel-5.2


    【解决方案1】:

    你可以做@include() 或者你可以通过控制器返回它,你不能同时做。我认为您可能对项目的结构有些混淆。

    如果您使用@include,它不会影响控制器。所以理论上,你需要在每个控制器方法中包含['products' =&gt; $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]);
        }
    }
    
    

    【讨论】:

    • 感谢您的回答。请我需要一点澄清。请问主文件会替换sidebar.blade吗?以及如何显示 home.blade,因为当我使用 @include 时,控制器不会被击中
    【解决方案2】:

    我终于不得不使用视图作曲家来解决这个问题。谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-28
      • 1970-01-01
      • 1970-01-01
      • 2013-02-21
      • 1970-01-01
      • 2015-10-03
      • 2012-01-13
      • 2012-02-13
      相关资源
      最近更新 更多