2014-11-14 2 views
0

У меня есть пара лезвийных страниц с использованием наследования, и я пытаюсь показать список продуктов на одной странице. Однако, когда объект передается в представление, что-то идет не так, и это приводит к сбою приложения.Laravel: не может передать переменную на вид

Ошибка, которую я получаю, это 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' => '[email protected]']); 
}); 
+0

Маршрут, указывающий на метод 'index()', вызывает эту ошибку, так как переменная $ battery не отправляется на просмотр. Но без вашего маршрута мы не знаем, что я делаю ... –

+0

Я не понимаю, что вы пытаетесь вернуть с помощью 'return Response :: json (['view' => $ view]);'. вы пытаетесь вернуть json или html-представление? – itachi

ответ

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

EDIT

Проблема заключается в том, что ваш маршрут должен использоваться с использованием вашего контроллера:

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

и теперь вы можете изменить метод index в:

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

@dabadaba Я обновил свой ответ –

+0

спасибо, что это все. За исключением того, что я должен изменить тип ответа в методе 'index'. Я должен ответить «return View :: make()», а не на ответ json, потому что корневая страница вызывается с регулярным запросом на получение, а не с ajax, что я использую для всей моей страницы. – dabadaba

+0

@dabadaba Конечно, это зависит от вас, какой тип ответа вы хотите вернуть. –

0

Вы не послать $batteries переменную из метода index, поэтому, конечно, не будет один. Метод 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

Смежные вопросы