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 语句很奇怪的主要内容,如果未能解决你的问题,请参考以下文章