【问题标题】:Conditional extends in BladeBlade 中的条件扩展
【发布时间】:2013-09-02 16:17:49
【问题描述】:

有没有办法在 Blade 模板语言中执行条件 @extends 语句?

我尝试过的:

@if(!Request::ajax())
    @extends('dashboard.master')
    @section('content')
@endif

<div class="jumbotron">
    Hey!
</div>

@if(!Request::ajax())
    @stop
@endif

输出

当请求不是 AJAX 时,它会打印出 @extends('dashboard.master'),但 AJAX 请求工作正常。

我想要做什么

停止包含用于 AJAX 的主模板(包括 headerfooter),以便它可以轻松显示请求的内容

【问题讨论】:

    标签: php ajax laravel blade


    【解决方案1】:

    这种逻辑真的应该远离模板。

    在您的控制器中,将$layout 属性设置为dashboard.master,然后不要调用返回您的视图或响应,而是仅以$this-&gt;layout-&gt;content = View::make('dashboard.template') 终止

    看看上面的Laravel docs

    你可能会得到这样的结果

    <?php
    
    class Something extends BaseController {
    
        $layout = 'dashboard.master';
    
        public function getIndex()
        {
            $template = View::make('dashboard.template');
    
            if(Request::ajax()) {
                return $template;
            }
    
            $this->layout->content = $template;
        }
    }
    

    【讨论】:

    • 由于某种原因无法让$this-&gt;layout-&gt;content显示任何内容。
    • 您可能需要在主文件中使用@yield('content') Controller Template
    • 我的主人已经有一个@yieldpastebin.com/raw.php?i=SDXs1kx3
    • 另外,将页眉和页脚放在单独的文件中真的有意义吗?
    • 那条评论很糟糕,你的 BaseController 中确实有 /** * Setup the layout used by the controller. * * @return void */ protected function setupLayout() { if ( ! is_null($this-&gt;layout)) { $this-&gt;layout = View::make($this-&gt;layout); } },对吧?
    【解决方案2】:

    在主布局中:

       @if(!Request::ajax())
    
           //the master layout with @yield('content'). i.e. your current layout
    
       @else
    
           @yield('content')
    
       @endif
    

    【讨论】:

    • 我不认为它是 hacky。这是简单的控制。如果 request 是 ajax,则显示这个。如果request 不是ajax,则显示。干净利落。还能让你的代码保持干净。
    【解决方案3】:
    @extends((( Request::ajax()) ? 'layouts.ajax' : 'layouts.default' ))
    

    【讨论】:

    • 干净简洁
    • 这行得通!谢谢。我完全忘记了三元语句。
    • 我知道这是一个老话题,但@section 可以通过在 layouts.ajax 中添加 @yield('content') 来解决乙>。我做到了,效果很好。
    猜你喜欢
    • 2016-06-17
    • 2019-08-19
    • 2015-04-08
    • 1970-01-01
    • 2011-03-03
    • 2019-11-23
    • 2021-08-13
    • 2014-09-25
    • 1970-01-01
    相关资源
    最近更新 更多