2014-10-07 146 views
0

我是Laravel的新成员。和我看到一个小问题。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('/', '[email protected]'); 

当我尝试运行指标.blade.php它说: 未定义变量:mainmenus(查看:C:\ xampp \ htdocs \ mestika \ app \ views \ layouts \ nav.bla (查看:C:\ xampp \ htdocs \ mestika \ app \ views \ layouts \ nav.blade.php)(查看:C:\ xampp \ htdocs \ mestika \ app \ views \ layouts \ nav.blade。 php)

我想要做的是我想在每个视图页面显示main_menu。我试过改变view :: make来查看:: share。但没有运气。有什么我想念在这里吗?

回答

0

使用了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您的菜单我tems($ 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。检查this article

+0

我试过你的建议。但刷新它时我得到了一个空白。 – ssuhat 2014-10-07 05:03:08

+0

确保你正在扩展正确的布局,视图作曲家必然会在'layouts_index'下,这是正确的主布局吗? – 2014-10-07 05:04:27

+0

哦,我忘了<?php在我的app/nav.php。当我包括它重复我的索引,而不是我的导航。喜欢循环永远我想。 – ssuhat 2014-10-07 05:06:45