Wie kann ich Switch in Blade-Vorlagen verwenden? Als ich benutzte:
@switch($login_error)
@case(1)
`E-mail` input is empty!
@break
@case(2)
`Password` input is empty!
@break
@endswitch
im Ergebnis sehe ich diesen Text als Klartext. Ich bevorzuge die Verwendung von Switch in wenigen Codeteilen, da diese für mich sauberer sind als bei Verwendung von if.
Aber wenn es nicht möglich ist, schreibe es einfach.
Antworten:
Aktualisierte 2020 Antwort
Seit Laravel 5.5 ist der @ -Switch in die Blade eingebaut. Verwenden Sie es wie unten gezeigt.
@switch($login_error) @case(1) <span> `E-mail` input is empty!</span> @break @case(2) <span>`Password` input is empty!</span> @break @default <span>Something went wrong, please try again</span> @endswitch
Ältere Antwort
Leider hat Laravel Blade keine switch-Anweisung. Sie können Laravel verwenden, wenn Sie sich einem anderen PHP-Switch nähern oder ihn verwenden. Sie können einfaches PHP in Blade-Vorlagen wie in jeder anderen PHP-Anwendung verwenden. Verwenden Sie ab Laravel 5.2 die Anweisung @php.
Option 1:
@if ($login_error == 1) `E-mail` input is empty! @elseif ($login_error == 2) `Password` input is empty! @endif
quelle
Sie können diesen Code einfach in die Startmethode der AppServiceProvider-Klasse einfügen.
Blade::extend(function($value, $compiler){ $value = preg_replace('/(\s*)@switch\((.*)\)(?=\s)/', '$1<?php switch($2):', $value); $value = preg_replace('/(\s*)@endswitch(?=\s)/', '$1endswitch; ?>', $value); $value = preg_replace('/(\s*)@case\((.*)\)(?=\s)/', '$1case $2: ?>', $value); $value = preg_replace('/(?<=\s)@default(?=\s)/', 'default: ?>', $value); $value = preg_replace('/(?<=\s)@breakswitch(?=\s)/', '<?php break;', $value); return $value; });
dann können Sie verwenden als:
@switch( $item ) @case( condition_1 ) // do something @breakswitch @case( condition_2 ) // do something else @breakswitch @default // do default behaviour @breakswitch @endswitch
Genieße es ~
quelle
parse error, expecting
"Endschalter (T_ENDSWITCH)" & # 039; oder"case (T_CASE)"' or
& quot; default (T_DEFAULT) `IN LARAVEL 5.2 UND OBEN:
Schreiben Sie Ihren üblichen Code zwischen den öffnenden und schließenden PHP-Anweisungen.
@php switch (x) { case 1: //code to be executed break; default: //code to be executed } @endphp
quelle
@php
Syntax ist sehr nützlich in L5.2>In Laravel 5.1 funktioniert dies in einem Blade:
<?php switch( $machine->disposal ) { case 'DISPO': echo 'Send to Property Disposition'; break; case 'UNIT': echo 'Send to Unit'; break; case 'CASCADE': echo 'Cascade the machine'; break; case 'TBD': echo 'To Be Determined (TBD)'; break; } ?>
quelle
Dies ist jetzt in Laravel 5.5 https://laravel.com/docs/5.5/blade#switch-statements erstellt
quelle
Sie können die Klinge wie folgt verlängern:
Blade::directive('switch', function ($expression) { return "<?php switch($expression): ?>"; }); Blade::directive('case', function ($expression) { return "<?php case $expression: ?>"; }); Blade::directive('break', function () { return "<?php break; ?>"; }); Blade::directive('default', function () { return "<?php default: ?>"; }); Blade::directive('endswitch', function () { return "<?php endswitch; ?>"; });
Sie können dann Folgendes verwenden:
@switch($test) @case(1) Words @break @case(2) Other Words @break @default Default words @endswitch
Beachten Sie jedoch die Warnungen unter: http://php.net/manual/en/control-structures.alternative-syntax.php
Wenn zwischen switch (): und dem ersten Fall ein Leerzeichen steht, schlägt der gesamte Codeblock fehl. Dies ist eher eine PHP-Einschränkung als eine Blade-Einschränkung. Sie können es möglicherweise umgehen, indem Sie die normale Syntax erzwingen, z.
Blade::directive('switch', function ($expression) { return "<?php switch($expression) { ?>"; }); Blade::directive('endswitch', function ($) { return "<?php } ?>"; });
Aber das fühlt sich ein bisschen falsch an.
quelle
Um das Leerzeichen in 'switch ()' zu überwinden, können Sie folgenden Code verwenden:
Blade::extend(function($value, $compiler){ $value = preg_replace('/(\s*)@switch[ ]*\((.*)\)(?=\s)/', '$1<?php switch($2):', $value); $value = preg_replace('/(\s*)@endswitch(?=\s)/', '$1endswitch; ?>', $value); $value = preg_replace('/(\s*)@case[ ]*\((.*)\)(?=\s)/', '$1case $2: ?>', $value); $value = preg_replace('/(?<=\s)@default(?=\s)/', 'default: ?>', $value); $value = preg_replace('/(?<=\s)@breakswitch(?=\s)/', '<?php break;', $value); return $value; });
quelle
Wenn Sie in Ihren Ansichten switch-Anweisungen verwenden, bedeutet dies normalerweise, dass Sie Ihren Code weiter neu faktorisieren können. Geschäftslogik ist nicht für Ansichten gedacht. Ich würde Ihnen eher empfehlen, die switch-Anweisung in Ihrem Controller auszuführen und dann das Ergebnis der switch-Anweisungen an die Ansicht zu übergeben.
quelle