Laravel的刀片:如果它是ajax请求,则显示没有布局的模板

时间:2013-07-29 23:23:15

标签: laravel laravel-3

所以我在我的模板上使用刀片(显然不是最新版本,但这并不重要)

@layout('master')

@section('mainContent')
my contents here
@endsection

它工作得很好,但事情是当我通过ajax请求调用页面时我不希望布局显示,只有mainContent部分

像这样......可能更清洁

@if(!$is_ajaxCall)
@layout('master')
@endif

@if(!$is_ajaxCall)
@section('mainContent')
@endif
my contents here

@if(!$is_ajaxCall)
@endsection
@endif

2 个答案:

答案 0 :(得分:4)

你确实很亲密。使用Request::ajax()来确定这一点。

@if(!Request::ajax())
    @layout('master')
@endif

您也可以考虑使用Blade Extensions来执行此操作。您需要创建刀片扩展(例如,从您的before过滤器),然后调用它。然后,您可以拨打看起来像这样的电话:

@layoutNoAjax('master')

要了解如何扩展Blade,请参阅此文章:http://blog.zerilliworks.net/blog/2013/04/03/blade-extensions-in-laravel/

更新

我的错误。请参阅此答案:https://stackoverflow.com/a/15170353/1626250

此外,您标记了使用laravel-4而不是@extends的{​​{1}}。

答案 1 :(得分:3)

IMO,检查ajax请求不是视图的责任,而是控制器的责任。

如果您创建了两个文件,一个用于正常请求,另一个用于ajax请求,然后有一个包含另一个文件,该怎么办?

例如:

模板文件mypage.blade.php

@layout('master')

@section('mainContent')
    @include('mypage.ajax')
@endsection

模板文件mypage.ajax.blade.php

my contents here

然后,只需要调用view::make('mypage')view::make('mypage.ajax')