【问题标题】:Check if a view exists and do an @include in Laravel Blade检查视图是否存在并在 Laravel Blade 中执行 @include
【发布时间】:2016-05-13 21:17:59
【问题描述】:

使用 Laravel Blade,是否有一种优雅的方法可以在执行 @include 之前检查视图是否存在?

例如我目前正在这样做:

@if(View::exists('some-view'))
    @include('some-view')
@endif

当“some-view”是一个包含变量的长字符串时,这会变得相当麻烦。

理想情况下,我正在寻找这样的东西:

@includeifexists('some-view')

或者让@include在视图不存在时输出一个空字符串。

顺便说一句,我还想提供一组视图并使用存在的第一个视图,例如:

@includefirstthatexists(['first-view', 'second-view', 'third-view'])

如果不存在,则输出一个空字符串。

我该怎么做呢?我需要扩展 BladeCompiler 还是有其他方法?

【问题讨论】:

标签: laravel laravel-5 blade laravel-blade


【解决方案1】:

我创建了这个刀片指令来包含存在的第一个视图,如果不存在任何视图,则不返回任何内容:

Blade::directive('includeFirstIfExists', function ($expression) {

        // Strip parentheses
        if (Str::startsWith($expression, '(')) {
            $expression = substr($expression, 1, -1);
        }

        // Generate the string of code to render in the blade
        $code = "<?php ";
        $code .= "foreach ( {$expression} as \$view ) { ";
        $code .=  "if ( view()->exists(\$view) ) { ";
        $code .= "echo view()->make(\$view, \Illuminate\Support\Arr::except(get_defined_vars(), array('__data', '__path')))->render(); ";
        $code .= "break; } } ";
        $code .= "echo ''; ";
        $code .= "?>";

        return $code;
    });

【讨论】:

    【解决方案2】:

    有类似的问题。事实证明,从 Laravel 5.3 开始,有一个 @includeIf Blade 指令用于此目的。

    只需@includeIf('some-view')

    【讨论】:

    • @includeIf() 是从哪个 laravel 版本开始的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 2016-09-26
    • 2014-06-08
    • 2014-02-24
    • 1970-01-01
    • 2016-05-19
    相关资源
    最近更新 更多