Php 检查laravel'中是否存在变量;s刀片指令
我正在尝试创建一个blade指令,该指令返回变量(如果变量已定义),或者如果变量未定义,则返回“无数据” 这是我在AppServiceProvider.php中的代码: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
<?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出现在viewUndefined 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; ?>";
});