【问题标题】:Laravel: can't pass variable to the viewLaravel:无法将变量传递给视图
【发布时间】:2015-01-11 21:33:38
【问题描述】:

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

我得到的错误是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']);
});

【问题讨论】:

  • 指向index()方法的路由会导致这个错误,因为没有$batteries变量被发送到视图。但是没有你的路线,我们不知道我在做什么......
  • 我不明白return Response::json(['view' =&gt; $view]); 想要返回的内容。您是要返回 json 还是 html 视图?

标签: laravel laravel-4 laravel-routing


【解决方案1】:

问题在于您显示home.indexindex 方法此文件包含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-&gt;name }}} 而不仅仅是 $battery-&gt;name

编辑

问题是你的路由,应该是使用你的控制器方法:

Route::get('/', ['uses' => 'HomeController@index']);

现在您可以将 index 方法更改为:

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

【讨论】:

  • 谢谢你,就是这样。除了我应该更改 index 方法中的响应类型。我应该用 return View::make() 而不是 json 响应来响应,因为根页面是通过常规 get 请求而不是 ajax 调用的,这是我用于整个页面的。
  • @dabadaba 当然,这取决于您要返回的响应类型。
【解决方案2】:

您不会从您的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]);
}

【讨论】:

  • 我也试过了,但我仍然收到undefined batteries 错误。我将使用我的路线编辑我的帖子。
猜你喜欢
  • 2015-06-18
  • 1970-01-01
  • 2016-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 2019-01-21
相关资源
最近更新 更多