Laravel 4:如果刀片布局中的语句很奇怪

时间:2013-03-05 13:05:17

标签: laravel laravel-4 blade

有人可以解释一下,为什么我的打印字符串为空白屏幕“@extends('layouts.default')”如果我正常请求页面(不是ajax)?

@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请求它,它应该是这样的。

3 个答案:

答案 0 :(得分: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');
  }
}

答案 1 :(得分: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

答案 2 :(得分:3)

你仍然可以像第一行一样在短线中运行你的条件

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