2013-03-05 4 views
5

Может кто-нибудь объяснить мне, почему я получаю пустой экран с напечатанной строкой «@extends ('layouts.default») «если я запрашиваю страницу обычно (не ajax)?Laravel 4: если инструкция в плане лезвия работает странно

@if(!Request::ajax()) 
    @extends('layouts.default') 
    @section('content') 
@endif 
Test 
@if(!Request::ajax()) 
    @stop 
@endif 

Я пытаюсь решить проблему с помощью Ajax, я не хочу, чтобы создать 2 шаблоны для каждого типа запроса, а также я хочу использовать шаблоны лезвий, поэтому использование макетов контроллер не работает для меня , Как я могу сделать это в шаблоне клинка? Я смотрел на это Laravel: how to render only one section of a template?

Кстати. Если я запрашиваю его с помощью ajax, он работает так, как должен.

ответ

9

Да @extends должен быть на линии 1.

И я нашел решение для PJAX , Вначале я не был уверен, что это может решить мою проблему, но это произошло. Не знаю, почему я боялся потерять функциональность лезвия, если вы действительно не можете потерять его таким образом. Если кто-то использует PJAX и нужно использовать один шаблон и без макета это может быть ваше решение:

protected $layout = 'layouts.default'; 

public function index() 
{ 
    if(Request::header('X-PJAX')) 
    { 
    return $view = View::make('home.index') 
     ->with('title', 'index'); 
    } 
    else 
    { 
    $this->layout->title = 'index'; 
    $this->layout->content = View::make('home.index'); 
    } 
} 
+0

Пожалуйста, отметьте свой собственный ответ, как принято, чтобы другие могли видеть, что он правильный. –

+0

Я могу принять свой собственный ответ только через 21 час. –

+0

Я вижу - мои извинения. –

3

Попробуйте переместить @extends в строку 1, и вы увидите, что шаблон лезвия будет отображаться правильно.

Что касается решения проблемы ajax, я думаю, что лучше перевести логику обратно на контроллер.

Пример:

… 
if (Request::ajax()) 
{ 
    return Response::eloquent($books); 
} else { 
    return View::make('book.index')->with('books', $books); 
} 
… 

Посмотрите на эту тему для получения дополнительной информации: http://forums.laravel.io/viewtopic.php?id=2508

+0

Проблема заключается в том, что мне не нужен макет, который будет отображаться вообще, если это ajax-запрос. Мне нужно чистое представление html с данными. Так что мне нужно повернуть макет рендеринга. Я знаю, что могу сделать это, используя макеты контроллеров, но я также хочу использовать функции blade-сервера. –

3

Вы все еще можете запустить свое состояние короткое передал в кулак линии, как так

@extends((Request::ajax())?"layout1":"layout2") 

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

  • Нет связанных вопросов^_^