我有几个使用继承的刀片页面,我试图在一个页面中显示产品列表。但是,当对象传递给视图时,某些内容出错并且会导致应用程序崩溃。
我得到的错误是Undefined variable: batteries
。
使用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' => 'HomeController@main']);
});
答案 0 :(得分: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的名称,您还应该使用{{{ $battery->name }}}
而不只是$battery->name
修改强>
问题是你的路线,应该是使用你的控制器方法:
Route::get('/', ['uses' => 'HomeController@index']);
现在您可以将index
方法更改为:
$batteries = Battery::all();
$view = View::make('home.main', compact('batteries'))->render();
return Response::json(['view' => $view]);
答案 1 :(得分:0)
您不会从$batteries
方法发送index
变量,因此当然不会有。{1}}变量。仅因为您包含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]);
}