Laravel 4:刀片布局中的 if 语句很奇怪
Posted
技术标签:
【中文标题】Laravel 4:刀片布局中的 if 语句很奇怪【英文标题】:Laravel 4: if statement in blade layout works strange 【发布时间】:2013-02-19 21:33:07 【问题描述】:如果我正常请求页面(不是 ajax),为什么我会得到带有打印字符串“@extends('layouts.default')”的空白屏幕?
@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 请求它,它会正常工作。
【问题讨论】:
【参考方案1】:您仍然可以像这样在第一行中短手运行您的条件
@extends((Request::ajax())?"layout1":"layout2")
【讨论】:
【参考方案2】:是的,@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');
【讨论】:
【参考方案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
【讨论】:
问题是如果是ajax请求,我根本不需要渲染布局。我需要带有数据的纯 html 视图。所以不知何故我需要打开布局渲染。我知道我可以使用控制器布局来做到这一点,但我也想使用刀片功能。以上是关于Laravel 4:刀片布局中的 if 语句很奇怪的主要内容,如果未能解决你的问题,请参考以下文章
@include 之后刀片未在刀片中显示内容 - Laravel 4.2