Überprüfen Sie, ob eine Variable in der Blade-Direktive von Laravel vorhanden ist
Lesezeit: 2 Minuten
Ich versuche, eine Blade-Direktive zu erstellen, die eine Variable zurückgibt (falls die Variable definiert ist) oder “keine Daten” zurückgibt, wenn die Variable nicht definiert ist.
Das ist mein Code in 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()
{
//
}
}
Hier ist meine index.blade.php:
<p class="lead">@p($myvar)</p>
Aber meine Direktive “p” gibt “keine Daten” aus, wenn eine Variable definiert ist. Wenn ich isset verwende, tritt ein Fehler auf: Cannot use isset() on the result of an expression (you can use "null !== expression" instead)
Wie könnte ich interne Anweisungen überprüfen, wenn eine Variable definiert ist?
Du sagst also, if(isset($myvar)) funktioniert nicht?
– Kann Celik
25. Mai 2016 um 1:33 Uhr
Blade hat eine Anweisung, um zu prüfen, ob eine Variable gesetzt ist:
@isset($var)
@endisset
wie handhabt ihr es sonst?
– Aderemi Dayo
13. Februar 2020 um 9:40 Uhr
Wie normal mit einem @else
– trüb
9. April 2020 um 10:32 Uhr
Versuchen Sie zu überprüfen, ob die Variable leer ist:
@if(empty($myvar))
<p>Data does not exist</p>
@else
<p>Your data is here!</p>
@endif
Der beste und sauberste Weg, um zu überprüfen, ob eine Variable in Blade vorhanden ist:
{!! !empty($myvariable) ? $myvariable : 'variable does not exist' !!}
Du kannst den … benutzen @isset Blade-Direktive, um zu prüfen, ob die Variable gesetzt ist oder nicht. Wenn Sie den Standardwert für diese Variable haben, können Sie sie alternativ direkt als verwenden {{ $vatiable ?? 'default_value' }}. Das ?? Weg ist ab Laravel v5.7 verfügbar.
Wenn Sie nach mehreren Variablen gleichzeitig suchen möchten, können Sie dies tun, indem Sie die UND-Operation auf den Ausdruck als anwenden @if(isset($var_one) && isset($var_two)).
Es gibt auch andere Möglichkeiten (langwierig) verwenden @if Direktive als @if(isset($variable)) aber es ist nicht zu empfehlen.
Einige Entwickler verwenden @ Symbol für Fehlerkontrolle in einer ähnlichen Situation. Das at-Zeichen (@) wird in PHP als Fehlerkontrolloperator verwendet. Wenn einem Ausdruck das @-Zeichen vorangestellt ist, werden Fehlermeldungen, die möglicherweise von diesem Ausdruck generiert werden, ignoriert. Wenn die track_errors Funktion aktiviert ist, wird eine Fehlermeldung durch den Ausdruck generiert und in der Variablen gespeichert $php_errormsg. Diese Variable wird bei jedem Fehler überschrieben. Die Verwendung von @ ist eine sehr schlechte Programmierpraxis Da es den Fehler nicht verschwinden lässt, versteckt es sie nur, und es macht das Debuggen viel schlimmer, da wir nicht sehen können, was tatsächlich mit unserem Code nicht stimmt.
13116000cookie-checkÜberprüfen Sie, ob eine Variable in der Blade-Direktive von Laravel vorhanden istyes
Du sagst also, if(isset($myvar)) funktioniert nicht?
– Kann Celik
25. Mai 2016 um 1:33 Uhr