如何在 Laravel 中包含边栏以显示在所有页面上
How to include a sidebar in Laravel to show on all pages
我想在 Laravel 的所有页面上显示一个显示数据库数据的边栏,但我一直收到此错误:
Undefined variable: products (View:
C:\xampp\htdocs\shop\resources\views\pages\sidebar.blade.php) (View:
边栏
@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>
您可以 @include()
也可以 return 通过控制器进行,不能同时进行。我认为您可能对项目的结构有点困惑。
如果您使用的是 @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')
将控制器中 return 的视图更改为新的 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]);
}
}
我终于不得不使用view composer来解决这个问题了。谢谢
我想在 Laravel 的所有页面上显示一个显示数据库数据的边栏,但我一直收到此错误:
Undefined variable: products (View: C:\xampp\htdocs\shop\resources\views\pages\sidebar.blade.php) (View:
边栏
@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>
您可以 @include()
也可以 return 通过控制器进行,不能同时进行。我认为您可能对项目的结构有点困惑。
如果您使用的是 @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')
将控制器中 return 的视图更改为新的 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]);
}
}
我终于不得不使用view composer来解决这个问题了。谢谢