1

嗨,stackoverflow!

在我的 laravel 视图中,我通过调用使用默认布局

@layout('layouts.default')

到同一个控制器,我正在发送 Ajax 请求,但如果它是一个 ajax 调用,我不能将“if”放到 @layout 中。因为如果 ajax 请求向控制器发出,它也会产生页眉、页脚和内容(页眉和页脚在默认布局中)。因此,为了避免这种情况,我制作了一份没有@layout 视图的副本。

然而,编辑两个文件进行更改实在是太无聊了。我不能在我的视图中添加类似的代码吗?:

@if(!$ajaxrequest)
 @layout('layouts.master')
@endif

我想要这个,因为我在控制器中的代码太乱了

4

3 回答 3

1

一个细微的变化是将布局的逻辑放在主布局模板中。例如

布局/app.blade.php:

@if (Request::ajax()) 

    @include('layouts.ajax-app')

@else

    @include('layouts.default-app')

@endif

您的视图只是像往常一样扩展主要布局,例如

@extends('layouts.app')

@section('content')
    Content goes here...
@endsection

然后创建一个默认布局文件(default-app.blade.php)和一个ajax布局文件(ajax-app.blade.php)。这样做的好处是,您的任何刀片模板都可以通过 Ajax 加载,而无需使用大量重复的逻辑来混淆控制器方法。

于 2018-04-11T13:19:21.417 回答
0

您不能@layout在这样的 if 语句之后进行调用(请参阅文档中“刀片模板”下的红色通知。您必须设置public $layoutand 调用$this->layout->nest而不是View::make(请参阅链接到的页面上的“基础知识”)以上)。

于 2013-03-02T03:26:40.090 回答
0

您可以在视图模板中使用类似的内容:

@extends( 'layouts.' . (isset($layout) ? $layout : 'default'))

如果将 $layout 变量设置为所需的布局,还应在控制器(或超级控制器)中检查 AJAX 请求。否则将采用“默认”布局。

于 2016-04-08T18:53:55.940 回答