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

时间:2016-05-25 00:25:13

标签: php laravel undefined laravel-5.2 directive

我试图创建一个回转变量(如果是变量定义)或回声"没有数据"如果变量未定义。

这是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()
    {
        //
    }
}

这是我的index.blade.php:

<p class="lead">@p($myvar)</p>

但我的指示&#34; p&#34;给出&#34;没有数据&#34;如果变量定义。 如果我使用isset错误发生:Cannot use isset() on the result of an expression (you can use "null !== expression" instead)

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

13 个答案:

答案 0 :(得分:18)

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

@isset($var)

@endisset

答案 1 :(得分:16)

您可以使用Blade功能检查isset,即

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

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

答案 2 :(得分:10)

尝试检查变量是否为空:

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

还可以查看this thread

答案 3 :(得分:9)

最好,最简洁的方法是检查刀片中是否存在变量:

 {!! !empty($myvariable) ? $myvariable : 'variable does not exist' !!}

答案 4 :(得分:9)

对于Laravel 5.7及更高版本使用。

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

答案 5 :(得分:2)

您想要传递给自定义指令的是什么?如果它只是一个字符串/ int,则以下内容应该有效。

Blade::directive('p', function($expression){
    $output = $expression ? $expression : 'nodata';
    return "<?php echo {$output}; ?>";
});

在刀片模板中

@p('Foo')

答案 6 :(得分:1)

您可以通过几种不同的方式来实现。

样本1:

@if( !empty($data['var']))
   {{ $data['var'] }} 
@endif

样本2:

{{ $data['var'] or 'no data found' }}

示例3:使用三元运算符

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

答案 7 :(得分:0)

@empty($var) $var is unset or false-y @endempty 指令可能会有用:

$AllFaxNumbers | Out-File "C:\temp\AllFaxNumber.txt"
$TMwithFaxs | Export-Csv "C:\temp\ADFaxNumbers.csv" -NoType

答案 8 :(得分:0)

对于Laravel版本> = 5.7

{{ $value ?? '' }}

对于Laravel版本<5.7

{{ $value or '' }}

答案 9 :(得分:0)

如果您尝试检查布尔变量,则可以使用@unless

<input type="text" class="@unless ($variable) d-none @endunless" >

答案 10 :(得分:0)

您可以使用@isset刀片指令来检查是否设置了变量。另外,如果您具有该变量的默认值,则可以将其直接用作{{ $vatiable ?? 'default_value' }}??方法在Laravel v5.7及更高版本中可用。

如果要一次检查多个变量,可以通过将AND运算符应用于@if(isset($var_one) && isset($var_two))来实现。

还有其他方法( longy )使用@if伪指令作为@if(isset($variable)),但不推荐。

在类似情况下,某些开发人员使用@符号进行错误控制。符号(@)在PHP中用作错误控制运算符。当表达式前面带有@符号时,该表达式可能生成的错误消息将被忽略。如果启用了track_errors功能,则表达式生成的错误消息将被保存在变量$php_errormsg中。该变量将在每个错误时被覆盖。 使用@是非常糟糕的编程习惯,因为它不会使错误消失,而只会将它们隐藏起来,并且由于我们看不到代码的实际问题,因此使调试工作变得更加糟糕。

答案 11 :(得分:0)

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

答案 12 :(得分:0)

要检查Laravel刀片指令中是否存在变量,请执行以下操作:

Blade::directive('datetime', function ($value) {
    
    return "<?php echo isset($value) ? ($value)->format('d/m/Y H:i:s') : null; ?>";
    
});