it-swarm.com.de

Prüfen Sie, ob eine Variable in der Direktive von laravel vorhanden ist

Ich versuche, eine Blade-Direktive zu erstellen, die die Echo-Variable (falls definiert) oder das Echo "keine Daten" enthält, wenn die Variable nicht definiert ist.

Dies 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 mein index.blade.php:

<p class="lead">@p($myvar)</p>

Meine Direktive "p" gibt jedoch "keine Daten" an, wenn eine Variable definiert ist . Wenn ich einen isset-Fehler verwende: Cannot use isset() on the result of an expression (you can use "null !== expression" instead)

Wie kann ich in Direktiven prüfen, ob eine Variable definiert ist?

13
pupadupa

Sie können die Blade-Funktion verwenden, um isset d. H. Zu überprüfen

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

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

15
Ali

Prüfen Sie, ob die Variable leer ist:

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

Kann auch diesen Thread überprüfen

10
Connor Leech

Blade hat eine Direktive, um zu prüfen, ob eine Variable gesetzt ist:

@isset($var)

@endisset
10
sanchezcl

Prüfen Sie am besten und saubersten, ob eine Variable im Blade vorhanden ist:

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

Für Laravel 5.7 verwenden.

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

3
George John

Für Laravel version> = 5.7

{{ $value ?? '' }}

Für Laravel Version <5.7

{{ $value or '' }}
2
Puneet Verma

Was versuchen Sie, an Ihre benutzerdefinierte Anweisung weiterzugeben? Wenn es nur eine Zeichenkette/int ist, sollte Folgendes funktionieren.

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

In der Blattvorlage

@p('Foo')
1
Jeemusu

Sie können es auf verschiedene Arten tun.

Probe-1:

@if( !empty($data['var']))
   {{ $data['var'] }} 
@endif

Probe 2: 

{{ $data['var'] or 'no data found' }}

Probe 3: Verwenden des ternären Operators

<a href="" class="{{ ( ! empty($data['var'] ? $data['var'] : 'no data found') }}">
0

Die @empty-Direktive kann nützlich sein:

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