【问题标题】:Laravel 4: if statement in blade layout works strangeLaravel 4:刀片布局中的 if 语句很奇怪
【发布时间】: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 请求它,它会正常工作。

【问题讨论】:

    标签: laravel laravel-4 blade


    【解决方案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 视图。所以不知何故我需要打开布局渲染。我知道我可以使用控制器布局来做到这一点,但我也想使用刀片功能。
        猜你喜欢
        • 2018-07-14
        • 1970-01-01
        • 2013-02-25
        • 1970-01-01
        • 2013-07-09
        • 1970-01-01
        • 1970-01-01
        • 2014-09-01
        相关资源
        最近更新 更多