Проверьте, существует ли переменная в директиве лезвия laravel

Я пытаюсь создать директиву 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()
{
//
}
}

Вот мой index.blade.php:

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

Но моя директива «p» не дает «данных», если переменная определена.
Если я использую isset ошибка происходит: Cannot use isset() on the result of an expression (you can use "null !== expression" instead)

Как я могу проверить внутри директивы, если переменная определена?

13

Решение

Вы можете использовать функциональность Blade для проверки isset, т.е.

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

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

15

Другие решения

Попробуйте проверить, является ли переменная пустой:

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

Можно также проверить эта тема

9

Лучший и самый чистый способ проверить, существует ли переменная в blade-сервере:

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

Blade имеет директиву для проверки, установлена ​​ли переменная:

@isset($var)

@endisset
8

Для Laravel 5.7 и выше используйте.

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

2

Что вы пытаетесь передать своей пользовательской директиве? Если это просто строка / int, должно работать следующее.

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

В лезвии шаблона

@p('Foo')
1

@empty Директива может быть полезна:

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

Вы можете сделать это несколькими разными способами.

Sample-1:

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

Sample-2:

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

Пример 3: Использование троичного оператора

<a href="" class="{{ ( ! empty($data['var'] ? $data['var'] : 'no data found') }}">
0
По вопросам рекламы [email protected]