Laravel:无法发送变量(未定义的变量)


Laravel: Failed to send variable (Undefined Variable)

我是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。查看这篇文章。