変数(変数が定義されている場合)をエコーする、または変数が定義されていない場合に "データなし"をエコーするブレードディレクティブを作成しようとしています。
これは_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>
_
しかし、変数が定義されている場合、私のディレクティブ「p」は「no data」を返します。 issetエラーが発生した場合:Cannot use isset() on the result of an expression (you can use "null !== expression" instead)
変数が定義されている場合、どのようにして内部ディレクティブをチェックできますか?
Bladeには、変数が設定されているかどうかを確認するためのディレクティブがあります。
@isset($var)
@endisset
IssetをチェックするためにBlade機能で使用できます。
{{ $checkvariable or 'not-exist' }}
変数が空かどうかを確認してください:
@if(empty($myvar))
<p>Data does not exist</p>
@else
<p>Your data is here!</p>
@endif
このスレッド も確認できます
Laravel 5.7以降の使用。
{{ $checkvariable ?? 'not-exist' }}
ブレードに変数が存在するかどうかを確認する最良かつ最もクリーンな方法:
{!! !empty($myvariable) ? $myvariable : 'variable does not exist' !!}
Laravel version> = 5.7
{{ $value ?? '' }}
Laravel version <5.7
{{ $value or '' }}
カスタムディレクティブに何を渡そうとしていますか?単なる文字列/整数の場合、次のように動作します。
Blade::directive('p', function($expression){
$output = $expression ? $expression : 'nodata';
return "<?php echo {$output}; ?>";
});
ブレードテンプレート内
@p('Foo')
いくつかの異なる方法でそれを行うことができます。
サンプル-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') }}">
@empty
ディレクティブは役に立つかもしれません:
@empty($var)
$var is unset or false-y
@endempty