Laravel-是否有任何Blade指令可检查变量是否存在并将其设置为特定值?

时间:2019-06-23 09:13:29

标签: laravel laravel-blade

Laravel刀片提供了许多指令,但是它有没有捷径可用来检查变量是否存在并将其设置为特定值?

现在我正在做这样的事情:-

 @if(isset($request['optional_columns']['reason']) && ($request['optional_columns']['reason'] === "true")
    // Do something ...
 @endif

模板现在看起来真的很乱,我想使用看起来整洁干净的东西。

2 个答案:

答案 0 :(得分:1)

您可以将antonyms指令嵌套在@isset directive中。

@if

或者您可以定义custom blade directive

@isset($request['optional_columns']['reason'])
  @if ($request['optional_columns']['reason'] === 'true')
    // Do something
  @endif
@endisset
Blade::if('setTrue', function($var) {
  return isset($var) && $var === 'true';
});

答案 1 :(得分:1)

回答我自己的问题: 我通过创建一个自定义的Blade指令解决了这个问题。

创建了一个自定义服务提供者,然后定义了我自己的Blade指令,如下所示:

    use Illuminate\Support\Facades\Blade;

    class BladeServiceProvider extends ServiceProvider {

            public function register() {

            }

            public function boot() {

                Blade::directive('existsandsetto', function ($expression) {
                    list($var, $value) = explode(',', $expression);
                    $var = trim($var);
                    $value = trim($value);
                    return "<?php if(isset($var) && $var === $value) : ?>";
                });

                Blade::directive('endexistsandsetto', function ($expression) {
                    return '<?php endif; ?>';
                });
            }
        }

在Blade模板中的用法:

@existsandsetto($foo, 'bar')
  // $foo exists and is set to 'bar' 
@endexistsandsetto
  • 不要忘记注册自定义服务提供商。