Ответ 1
Blade имеет директиву для проверки, установлена ли переменная:
@isset($var)
@endisset
Я пытаюсь создать директиву блейдов, которая является переменной 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)
Как я могу проверить внутренние директивы, если определена переменная?
Blade имеет директиву для проверки, установлена ли переменная:
@isset($var)
@endisset
Функцию Blade можно использовать для проверки isset i.e
{{ $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' }}
Лучший и самый чистый способ проверить, существует ли переменная в blade-сервере:
{!! !empty($myvariable) ? $myvariable : 'variable does not exist' !!}
Что вы пытаетесь передать своей настраиваемой директиве? Если это просто строка /int, следует работать.
Blade::directive('p', function($expression){
$output = $expression ? $expression : 'nodata';
return "<?php echo {$output}; ?>";
});
В шаблоне Blade
@p('Foo')
Директива @empty
может быть полезна:
@empty($var)
$var is unset or false-y
@endempty
Вы можете сделать это несколькими разными способами.
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') }}">
Для версии Laravel> = 5.7
{{ $value ?? '' }}
Для версии Laravel <5.7
{{ $value or '' }}