检查视图是否存在,并在Laravel刀片中执行@include

检查视图是否存在,并在Laravel刀片中执行@include,laravel,laravel-5,blade,laravel-blade,Laravel,Laravel 5,Blade,Laravel Blade,使用Laravel Blade,在执行@include之前,是否有一种优雅的方法来检查视图是否存在 例如,我目前正在这样做: @if(View::exists('some-view')) @include('some-view') @endif 当“某个视图”是一个包含变量的长字符串时,它会变得相当麻烦 理想情况下,我正在寻找这样的东西: @includeifexists('some-view') 或者,要使@include,如果视图不存在,只需输出一个空字符串即可 另外,我还想提供

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

例如,我目前正在这样做:

@if(View::exists('some-view'))
    @include('some-view')
@endif
当“某个视图”是一个包含变量的长字符串时,它会变得相当麻烦

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

@includeifexists('some-view')
或者,要使
@include
,如果视图不存在,只需输出一个空字符串即可

另外,我还想提供一组视图,并使用第一个现有视图,例如:

@includefirstthatexists(['first-view', 'second-view', 'third-view'])
如果不存在,则输出一个空字符串


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

也有类似的问题。事实证明,在Laravel 5.3中,有一个用于此目的的
@includeIf
blade指令


只需执行
@includeIf('some-view')

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

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;
    });
Blade::指令('includeFirstIfExists',函数($expression){
//带括号
if(Str::startsWith($expression,“(”)){
$expression=substr($expression,1,-1);
}
//生成要在blade中渲染的代码字符串
$code=“”;
返回$code;
});

我95%确定您需要为此编写自己的方法,但幸运的是,这很简单:谢谢!我来看看laravel版本是从什么开始的
@includeIf()