Ü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

Kann auch prüfen dieser Faden

Für Laravel 5.7 und höher verwenden.

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

  • Stimmt nicht, ich erhalte mit diesem Code eine undefinierte Variable, die Laravel v7 verwendet

    – Lewis

    6. April um 7:58

Sie können die Blade-Funktionalität zum Überprüfen von Issets verwenden, dh

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

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

Für Laravel-Version >=5.7

{{ $value ?? '' }}

Für Laravel-Version <5.7

{{ $value or '' }}

Benutzer-Avatar
TechPotter

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.

1311600cookie-checkÜberprüfen Sie, ob eine Variable in der Blade-Direktive von Laravel vorhanden ist

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy