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

Я пытаюсь создать директиву блейдов, которая является переменной echo (если определена переменная) или echo "no data", если переменная undefined.

Это мой код в 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 error: Cannot use isset() on the result of an expression (you can use "null !== expression" instead)

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

Ответ 1

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

@isset($var)

@endisset

Ответ 3

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

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

Также можете проверить эту тему

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

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

В шаблоне Blade

@p('Foo')

Ответ 7

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

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

Ответ 8

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

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

Ответ 9

Для версии Laravel> = 5.7

{{ $value ?? '' }}

Для версии Laravel <5.7

{{ $value or '' }}