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

是否可以在 Laravel (4) 刀片模板中获取视图/布局名称

我的javascript文件中的Laravel 4刀片语法

laravel:如何包含刀片布局中的部分?

Laravel v3.2.13-5 刀片模板不起作用

刀片内联 if 和 else if 语句