我是Laravel的新手。我的视野有点问题。
这是我的控制器
public function main_menu()
{
$mainmenus = DB::table('main_menus')->get();
$subs = $mainmenus;
foreach ($subs as $key => $value)
{
$subs[$key] = DB::table('sub_menus')
->where('parent_id', '=' , $value->main_id)
->get();
}
$products = DB::table('sub_menus')->get();
foreach ($products as $key => $value) {
$products[$key] = DB::table('products')
-> where('product_parent', '=', $value->sub_id)
->get();
}
$data = array("mainmenus" => $mainmenus,
"submenus" => $subs,
"productmenus" => $products);
return View::make('layouts/nav', $data);
}
这是我的布局/nav.blade.php
@extends('layouts_index')
@section('nav')
<div class="nav">
<nav class="navbar">
<ul id="menu">
<li class="active"><a href="index" class="drop"><i class="icon-home icon-small"> </i>Home</a></li>
@foreach ($mainmenus as $key=>$mainmenu)
<li>
<a href="menu/{{ $mainmenu->main_id }}" class="drop">
<i class="icon-{{ $mainmenu->main_icon }} icon-small"></i>{{ $mainmenu->main_title_id }}</a>
@if( $mainmenu->main_desc_id != "")
<div class="dropdown_3columns">
<div class="col_4">
<h3><i class="icon-{{ $mainmenu->main_icon }} icon-large"></i>{{ $mainmenu->main_title_id }}</h3>
<h4>{{ $mainmenu->main_desc_id }}</h4>
</div>
@foreach ($submenus[$key] as $key=>$submenu)
<div class="col_1">
<a href="" ><h5><i class="icon-small icon-bookmark"></i>{{ $submenu->sub_title_id }}</h5></a>
<ul>
@foreach ($productmenus[$key] as $productmenu)
<li>
<a href="" ><i class="icon-small icon-th-large"></i>{{ $productmenu->product_title_id }}</a>
</li>
@endforeach
</ul>
</div>
@endforeach
</div>
@endif
</li>
@endforeach
<li class="last"><a href="#" class="drop "><i class="icon-pencil icon-small"></i>Tentang Kami</a></li>
</ul>
</nav>
</div>
@stop
我的路线:
Route::get('/', 'ShowsController@index');
当我尝试运行index.blade.php时,它会说:未定义的变量:主菜单(视图:C:''examplep''htdocs''mestika''app''views''layouts''nav.blade.php)
我想做的是在每个视图页面上显示mainmenu。我已尝试将视图::make更改为视图::share。但没有运气。这里有我想念的东西吗?
使用view composer
作为菜单/导航,这样您就不必手动在每个视图中构建导航,例如,将此代码放在名为nav.php
的文件中,并将文件放在app/start
文件夹中,然后从app/start/global.php
文件中包括它:
// app/start/nav.php
View::composer('layouts_index', function($view){
// Prepare the menuitems here
$mainmenus = DB::table('main_menus')->get();
$subs = 'Prepare it here...';
$productmenus = 'Prepare it'
return $view->with('mainmenus', $mainmenus)
->with('submenus', $submenus)
->with('products', $products);
});
在app/start/global.php
文件(底部)中添加以下内容:
require 'nav.php';
现在,每次扩展layouts_index.blade.php
时,您的菜单项($mainmenus、$submenus和$productmenus)都将在主布局中可用。所以,你可以在布局中使用这样的东西:
@if(isset($mainmenus))
@foreach ($mainmenus as $key => $mainmenu)
{{ 'Use it here...' }}
@endforeach
@endif
现在,在您的Controller
中,当您将任何数据传递到任何扩展layouts_index
的视图时,您不需要手动传递菜单项,因为这些菜单项将由您创建的view composer
通过Framework
传递。
如果您不想传递products
的菜单项,那么只需从视图编辑器中删除->with('products', $products)
,这样只有$mainmenus and $submenus
会自动传递到主布局,并且您可以从任何控制器手动传递$products
。查看这篇文章。