我试图创建一个回转变量(如果是变量定义)或回声"没有数据"如果变量未定义。
这是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)
如果定义了变量,我如何检查内部指令?
答案 0 :(得分:18)
刀片有一个指令来检查是否设置了变量:
@isset($var)
@endisset
答案 1 :(得分:16)
您可以使用Blade功能检查isset,即
{{ $checkvariable or 'not-exist' }}
答案 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; ?>";
});