J'essaie de créer une directive de lame indiquant la variable d'écho (si variable définie) ou l'écho "pas de données" si la variable est non définie.
Ceci est mon code dans 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()
{
//
}
}
Voici mon index.blade.php:
<p class="lead">@p($myvar)</p>
Mais ma directive "p" ne donne "pas de données" si la variable est définie . Si j'utilise isset error se produit: Cannot use isset() on the result of an expression (you can use "null !== expression" instead)
Comment puis-je vérifier les directives internes si la variable est définie?
Vous pouvez utiliser la fonctionnalité de lame pour vérifier isset i.e
{{ $checkvariable or 'not-exist' }}
Essayez de vérifier si la variable est vide:
@if(empty($myvar))
<p>Data does not exist</p>
@else
<p>Your data is here!</p>
@endif
Peut aussi vérifier ce fil
Blade a une directive pour vérifier si une variable est définie:
@isset($var)
@endisset
Le moyen le plus propre et le plus propre de vérifier s’il existe une variable dans la lame:
{!! !empty($myvariable) ? $myvariable : 'variable does not exist' !!}
Pour Laravel 5.7 et plus, utilisez.
{{ $checkvariable ?? 'not-exist' }}
Qu'essayez-vous de transmettre à votre directive personnalisée? Si c'est juste une chaîne/int, ce qui suit devrait fonctionner.
Blade::directive('p', function($expression){
$output = $expression ? $expression : 'nodata';
return "<?php echo {$output}; ?>";
});
Dans le modèle de lame
@p('Foo')
Vous pouvez le faire de différentes manières.
Échantillon-1:
@if( !empty($data['var']))
{{ $data['var'] }}
@endif
Échantillon 2:
{{ $data['var'] or 'no data found' }}
Exemple 3: Utilisation de l'opérateur ternaire
<a href="" class="{{ ( ! empty($data['var'] ? $data['var'] : 'no data found') }}">
La directive @empty
pourrait être utile:
@empty($var)
$var is unset or false-y
@endempty