有人可以解释一下,为什么我的打印字符串为空白屏幕“@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请求它,它应该是这样的。
答案 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")