5

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

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

我正在尝试解决 Ajax 的问题,我不想为每种请求类型创建 2 个模板,而且我确实想使用刀片模板,因此使用控制器布局对我不起作用。我怎样才能在刀片模板中做到这一点?我在看这个Laravel:如何只渲染模板的一部分?

顺便一提。如果我用 ajax 请求它,它会像它应该的那样工作。

4

3 回答 3

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');
  }
}
于 2013-03-05T16:46:45.027 回答
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

于 2013-03-05T14:37:34.687 回答
3

你仍然可以像这样在拳头线上运行你的状况

@extends((Request::ajax())?"layout1":"layout2")
于 2014-03-16T10:32:05.200 回答