2014-11-14 52 views
0

我有几个使用继承的刀片页面,我试图在一个页面中显示产品列表。但是,当对象传递给视图时出现了问题,并导致应用程序崩溃。Laravel:无法将变量传递到视图

我得到的错误是Undefined variable: batteries

With isset($batteries)我测试了确实变量没有进入视图。

下面是代码:

/* controller */ 

class HomeController extends \BaseController { 

    public function index() { 
     $view = View::make('home.index')->render(); 
     return Response::json(['view' => $view]); 
    } 

    public function main() { 
     $batteries = Battery::all(); 
     $view = View::make('home.main', compact('batteries'))->render(); 
     return Response::json(['view' => $view]); 
    } 

} 

浏览:

<!-- home/index.blade.php --> 
@extends('layouts.master') 

@section('content') 

@include('home.main') 

@stop 

<!-- home/main.blade.php --> 
<ul class="list-group"> 
    @foreach ($batteries as $battery) 
     <li class="list-group-item">$battery->name</li> 
    @endforeach 
</ul> 

有什么不对?为什么变量未定义?

编辑

Route::get('/', function() { 
    return View::make('home.index'); 
}); 

Route::group(['before' => 'ajax'], function() { 
    Route::get('/home/main', ['as' => 'home.main', 'uses' => '[email protected]']); 
}); 
+0

指向'index()'方法的路由将导致此错误,因为没有$ batteries变量被发送到视图。但没有你的路线,我们不知道我在做什么... – 2014-11-14 13:22:34

+0

我不明白你想要返回''返回Response :: json(['view'=> $ view]);'。你是否试图返回JSON或HTML视图? – itachi 2014-11-14 16:13:39

回答

0

的问题是index方法,你显示home.index该文件包括home.main,并在此文件中使用$batteries变量。

你不应该在这里包括home.main模板或者$batteries设置添加额外的检查:

@if (isset($batteries)) 
<ul class="list-group"> 
    @foreach ($batteries as $battery) 
     <li class="list-group-item">{{{ $battery->name }}}</li> 
    @endforeach 
</ul> 
@endif 

要显示$电池的名称,你也应该使用{{{ $battery->name }}}而不仅仅是$battery->name

编辑

问题在于你的路线,应该使用你的控制器方法:

Route::get('/', ['uses' => '[email protected]']); 

,现在你可以改变你的index方法为:

$batteries = Battery::all(); 
$view = View::make('home.main', compact('batteries'))->render(); 
return Response::json(['view' => $view]); 
+0

@dabadaba我已经更新了我的回答 – 2014-11-14 13:34:07

+0

谢谢你就是这样。除了我应该改变'index'方法的响应类型。我应该使用'return View :: make()'而不是使用json响应来响应,因为根页面是通过一个常规的get请求来调用的,而不是使用ajax,而这正是我用于整个页面的。 – dabadaba 2014-11-14 13:38:38

+0

@dabadaba当然,这取决于你想要返回什么类型的响应。 – 2014-11-14 13:42:27

0

你不会从你的index方法来发送$batteries变量,所以当然不会有一个。 main方法不会因为您包含main.blade.php视图而运行。

您需要在index方法中执行与main方法相同的操作。

public function index() { 
    $batteries = Battery::all(); 
    $view = View::make('home.index', compact('batteries'))->render(); 
    return Response::json(['view' => $view]); 
} 
+0

我也尝试过,我仍然遇到'undefined batteries'错误。我将用我的路线编辑我的帖子。 – dabadaba 2014-11-14 13:28:40