我有一个自定义的布局刀片,它具有多级导航菜单和 2页刀片,用于扩展布局。我想创建一个通过数据循环的侧面导航菜单。因此,如果创建了新的侧面导航,则不必弄乱布局。
但是问题是,我不知道将数据传递给布局本身。
现在,我只是将数据传递到我拥有的每个页面控制器上。我认为最好将数据传递到布局并调用任何扩展布局的页面,而不必在每个页面控制器上再次传递数据。
布局刀片(user.blade.php)
<li class="nav-item has-treeview">
<a href="#" class="nav-link">
<i class="nav-icon fas fa-wifi"></i>
<p>
Hotspot Voucher
<i class="right fas fa-angle-left"></i>
</p>
</a>
<ul class="nav nav-treeview">
<li class="nav-item has-treeview">
<a href="#" class="nav-link">
<i class="far fa-circle nav-icon"></i>
<p>
Floors
<i class="right fas fa-angle-left"></i>
</p>
</a>
<ul class="nav nav-treeview floorlist">
@foreach ($floors as $floor)
<li class="nav-item">
<a href="{{ route('home.floor.submit', $floor->floor_id) }}" class="nav-link">
<i class="far fa-dot-circle nav-icon"></i>
<p>{{ ucwords($floor->floor_name) }}</p>
</a>
</li>
@endforeach
</ul>
</li>
</ul>
</li>
家用刀片(home.blade.php)
@extends('layouts.user')
@section('content')
<!-- Content Header (Page header) -->
<div class="content-header">
<div class="container-fluid">
<div class="row mb-2">
<div class="col-sm-6">
<h1 class="m-0 text-dark">Dashboard</h1>
</div><!-- /.col -->
<div class="col-sm-6">
<ol class="breadcrumb float-sm-right">
<li class="breadcrumb-item">
<a href="{{ route('home') }}">Home</a>
</li>
<li class="breadcrumb-item active">Dashboard</li>
</ol>
</div><!-- /.col -->
</div><!-- /.row -->
</div><!-- /.container-fluid -->
</div>
<!-- /.content-header -->
<!-- Main content -->
<section class="content">
<div class="container-fluid">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-default">
<div class="panel-body">
@component('components.who')
@endcomponent
</div>
</div>
</div>
</div>
</div>
</section>
<!-- /.content -->
@endsection
地板刀片(floor.blade.php)
@extends('layouts.user')
@section('content')
<!-- Content Header (Page header) -->
<div class="content-header">
<div class="container-fluid">
<div class="row mb-2">
<div class="col-sm-6">
<h1 class="m-0 text-dark">{{ ucwords($get_floor_name) }}</h1>
</div><!-- /.col -->
<div class="col-sm-6">
<ol class="breadcrumb float-sm-right">
<li class="breadcrumb-item">
<a href="{{ route('home') }}">Home</a>
</li>
<li class="breadcrumb-item">
<a href="{{ route('home') }}">Dashboard</a>
</li>
<li class="breadcrumb-item active">{{ ucwords($get_floor_name) }}</li>
</ol>
</div><!-- /.col -->
</div><!-- /.row -->
</div><!-- /.container-fluid -->
</div>
<!-- /.content-header -->
<!-- Main content -->
<section class="content">
<div class="container-fluid">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-default">
<div class="panel-body">
@foreach ($get_rooms as $get_room)
{{ ucwords($get_room->rooms_name) }}
@endforeach
</div>
</div>
</div>
</div>
</div>
</section>
<!-- /.content -->
@endsection
HomeController
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Auth;
use App\Floor;
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$floors = Floor::select(
'floors.id AS floor_id',
'floors.name AS floor_name'
)
->where('floors.co_id', Auth::user()->co_id)
->get();
return view('home')->with('floors', $floors);
}
}
FloorController
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Auth;
use App\Floor;
use App\Room;
class FloorController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
public function index($fid)
{
$floors = Floor::select(
'floors.id AS floor_id',
'floors.name AS floor_name'
)
->where('floors.co_id', Auth::user()->co_id)
->get();
$get_floor_details = Floor::where(['floors.co_id' => Auth::user()->co_id, 'id' => $fid])->get();
foreach($get_floor_details as $get_floor)
{
$get_floor_name = $get_floor->name;
}
$get_rooms = Room::select(
'rooms.id AS room_id',
'rooms.name AS rooms_name',
'floors.name AS get_floor_name'
)
->join('floors', 'floors.id', '=', 'rooms.floor_id')
->where(['rooms.co_id' => Auth::user()->co_id, 'rooms.floor_id' => $fid])
->get();
$data = [
'floors' => $floors,
'get_floor_name' => $get_floor_name,
'get_rooms' => $get_rooms
];
return view('floor')->with($data);
}
}
@Andy Song解决方案
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use View;
use Auth;
use App\Floor;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
View::composer('layouts.user', function ($view)
{
$floors = Floor::select(
'floors.id AS floor_id',
'floors.name AS floor_name'
)
->where(['co_id' => Auth::user()->co_id])
->get();
$view->with('floors', $floors);
});
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
}
答案 0 :(得分:0)
不是从各处返回变量,而是在一个位置(也许在View::share()
中)使用index()
:
View::share('floors', $floors);
注意:请不要忘记在文件的开头添加视图。
use View;
答案 1 :(得分:0)
您可以使用View composers
,然后放入AppServiceProvider
<?php
namespace App\Providers;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
.......
public function boot()
{
View::composer('*', function ($view) {
$view->with('foo', ['bar', 'baz']);
});
}
}
通过添加星号(*)字符,这意味着它在任何地方都可以使用。