Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 检查laravel'中是否存在变量;s刀片指令_Php_Laravel_Undefined_Laravel 5.2_Directive - Fatal编程技术网

Php 检查laravel'中是否存在变量;s刀片指令

Php 检查laravel'中是否存在变量;s刀片指令,php,laravel,undefined,laravel-5.2,directive,Php,Laravel,Undefined,Laravel 5.2,Directive,我正在尝试创建一个blade指令,该指令返回变量(如果变量已定义),或者如果变量未定义,则返回“无数据” 这是我在AppServiceProvider.php中的代码: <?php namespace App\Providers; use Blade; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { /** * Bootstrap

我正在尝试创建一个blade指令,该指令返回变量(如果变量已定义),或者如果变量未定义,则返回“无数据”

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

您试图传递给自定义指令的是什么?如果它只是一个字符串/int,那么下面的代码应该可以使用

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

您可以使用刀片内功能检查isset,即

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

尝试检查变量是否为空:

@if(empty($myvar))
    <p>Data does not exist</p>
@else
    <p>Your data is here!</p>
@endif
@if(空($myvar))
数据不存在

@否则 你的数据在这里

@恩迪夫

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

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

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

@isset($var)

@endisset

对于Laravel 5.7以后的版本,请使用


{{$checkvariable???'notexist'}

指令
@empty
可能有用:

@empty($var)
   $var is unset or false-y
@endempty

你可以用几种不同的方法来做

样本-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') }}">

对于Laravel版本>=5.7

{{ $value ?? '' }}

对于Laravel版本如果您尝试检查bool变量,则可以使用@除非


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

如果您想一次检查多个变量,可以通过将AND运算应用于表达式,如
@If(isset($var_-one)和&isset($var_-two))

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


一些开发人员在类似情况下使用
@
符号进行错误控制。at符号(@)在PHP中用作错误控制运算符。当表达式前面带有@符号时,将忽略该表达式可能生成的错误消息。如果启用了
track\u errors
功能,则表达式生成的错误消息将保存在变量
$php\u errormsg
中。此变量将在每次错误时被覆盖。使用@是一种非常糟糕的编程实践,因为它不会使错误消失,它只是隐藏错误,而且会使调试变得更糟,因为我们看不到代码的实际错误。

对于最新版本的幼虫,使变量在刀片模板中成为可选变量。 将
$myvar
替换为
{{$myvar}}与{{$myvar???''''}}
要检查变量是否存在于Laravel blade指令中,请执行以下操作:

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

那么你是说(isset($myvar))是否不起作用?在我看来,我想这样使用
@p($subtitle)
。如果我使用您的解决方案,我会得到以下错误:
未定义变量:subtitle
@pupadupa您是否已将$subtitle变量传递给视图?听起来blade找不到您的变量。这就是问题所在-如果变量不存在,请签入指令。如果我没有将变量传递给view,有没有办法从指令返回'nodata'?没有,我假设您收到的错误来自blade,甚至在它执行自定义指令之前。jeemusu@it出现在view
Undefined variable:subtitle(view:lp/resources/views/blocks/cover.blade.php)(View:lp/resources/views/blocks/cover.blade.php)
将来我想在我的指令中添加更复杂的逻辑。例如auth user的不同样式。所以我只想在视图中键入
p($foo)
,而不是重复
{$checkvariable或'notexist'}
和用于身份验证检查的逻辑。我在数组中有一个未定义的索引,这是一个完美的解决方案。问题是变量是否存在,而不是布尔值。@除非如果未设置变量,否则将失败。您如何处理其他问题?与使用
@else的正常情况一样
{{ $value ?? '' }}
{{ $value or '' }}
Blade::directive('datetime', function ($value) {
    
    return "<?php echo isset($value) ? ($value)->format('d/m/Y H:i:s') : null; ?>";
    
});