检查laravel的blade指令中是否存在变量

pup*_*upa 22 php directive undefined laravel laravel-5.2

我正在尝试创建刀片指令,如果变量未定义,则返回变量(如果变量定义)或echo"无数据".

这是我的代码AppServiceProvider.php:

<?php

namespace App\Providers;

use Blade;
use Illuminate\Support\ServiceProvider;


class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        Blade::directive('p', function($ex) {
            error_log(print_r($ex,true));
            return '<?php $defined_vars = get_defined_vars(); if(array_key_exists(\''. $ex .'\', $defined_vars) ): echo ' . $ex . ' ; else: echo \'no data\'; endif;?>';
        });
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的index.blade.php:

<p class="lead">@p($myvar)</p>
Run Code Online (Sandbox Code Playgroud)

但是如果定义了变量,我的指令"p"给出"无数据".如果我使用isset错误发生:Cannot use isset() on the result of an expression (you can use "null !== expression" instead)

如果变量定义,我如何检查内部指令?

小智 27

Blade有一个指令来检查是否设置了变量:

@isset($var)

@endisset
Run Code Online (Sandbox Code Playgroud)

  • 就像正常的“@else”一样 (5认同)
  • 其他的你怎么处理? (3认同)

Ali*_*Ali 16

您可以在Blade功能中使用来检查isset ie

{{ $checkvariable or 'not-exist' }}
Run Code Online (Sandbox Code Playgroud)

https://laravel.com/docs/5.2/blade#displaying-data


Pun*_*rma 13

对于 Laravel 版本 >=5.7

{{ $value ?? '' }}
Run Code Online (Sandbox Code Playgroud)

对于 Laravel 版本 <5.7

{{ $value or '' }}
Run Code Online (Sandbox Code Playgroud)


Geo*_*ohn 12

适用于Laravel 5.7及更高版本。

{{ $checkvariable ?? 'not-exist' }}


Con*_*ech 11

尝试检查变量是否为空:

@if(empty($myvar))
    <p>Data does not exist</p>
@else
    <p>Your data is here!</p>
@endif
Run Code Online (Sandbox Code Playgroud)

也可以查看这个帖子


Tec*_*ter 10

检查刀片中是否存在变量的最佳和最干净的方法:

 {!! !empty($myvariable) ? $myvariable : 'variable does not exist' !!}
Run Code Online (Sandbox Code Playgroud)


Dib*_*Roy 6

您可以通过几种不同的方式来做到这一点。

样本1:

@if( !empty($data['var']))
   {{ $data['var'] }} 
@endif
Run Code Online (Sandbox Code Playgroud)

样本2:

{{ $data['var'] or 'no data found' }}
Run Code Online (Sandbox Code Playgroud)

示例 3:使用三元运算符

<a href="" class="{{ ( ! empty($data['var'] ? $data['var'] : 'no data found') }}">
Run Code Online (Sandbox Code Playgroud)


Kir*_*iya 6

您可以使用@issetblade指令来检查变量是否已设置。或者,如果您有该变量的默认值,您可以直接将其用作{{ $vatiable ?? 'default_value' }}. 该??方式在 Laravel v5.7 版本中可用。

\n\n

如果要一次检查多个变量,可以通过对表达式 as 进行 AND 运算来实现@if(isset($var_one) && isset($var_two))

\n\n

还有其他方法(冗长)使用@if指令 as@if(isset($variable))但不推荐。

\n\n

一些开发人员@在类似情况下使用符号进行错误控制。at 符号 (@) 在 PHP 中用作错误控制运算符。当表达式前面带有 @ 符号时,该表达式可能生成的错误消息将被忽略。如果track_errors启用该功能,表达式会生成一条错误消息,并将其保存在变量中$php_errormsg。每次出现错误时都会覆盖该变量。使用@是非常糟糕的编程习惯,因为它不会使错误消失,它只是隐藏它们,并且它使调试变得更糟,因为我们无法\xe2\x80\x99s看到\xe2\x80\x99s实际上有什么问题我们的代码。

\n


小智 5

对于 Larvael 的最新版本,请在刀片模板中将该变量设置为可选。$myvar用。。。来 代替{{ $myvar }} with {{ $myvar?? '' }}