Comment utiliser un commutateur dans les modèles de lame? Quand j'ai utilisé:
@switch($login_error)
@case(1)
`E-mail` input is empty!
@break
@case(2)
`Password` input is empty!
@break
@endswitch
en conséquence, je vois ce texte en texte clair. Je préfère utiliser switch dans quelques morceaux de code car il est plus propre que lorsque j'utilise if.
Mais si ce n'est pas possible, écrivez-le.
Réponse mise à jour 2019
Depuis Laravel 5.5, le @ commutateur est intégré à la lame. Utilisez-le comme indiqué ci-dessous.
@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
Réponse plus ancienne
Malheureusement, Laravel La lame n'a pas d'instruction switch. Vous pouvez utiliser Laravel si vous utilisez une autre approche ou utilisez le commutateur plain PHP. Vous pouvez utiliser un simple PHP dans les modèles de lame, comme dans toute autre application PHP. À partir de Laravel 5.2 et supérieur, utilisez l'instruction @php.
Option 1:
@if ($login_error == 1)
`E-mail` input is empty!
@elseif ($login_error == 2)
`Password` input is empty!
@endif
Vous pouvez simplement ajouter ce code dans la méthode de démarrage de la classe AppServiceProvider.
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;
});
alors vous pouvez utiliser comme:
@switch( $item )
@case( condition_1 )
// do something
@breakswitch
@case( condition_2 )
// do something else
@breakswitch
@default
// do default behaviour
@breakswitch
@endswitch
Profitez-en ~
IN LARAVEL 5.2 ET PLUS:
Ecrivez votre code habituel entre les instructions PHP d'ouverture et de fermeture.
@php
switch (x) {
case 1:
//code to be executed
break;
default:
//code to be executed
}
@endphp
Ceci est maintenant construit dans Laravel 5.5 https://laravel.com/docs/5.5/blade#switch-statements
Dans Laravel 5.1, cela fonctionne dans une lame:
<?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;
}
?>
Pour surmonter l'espace dans 'switch ()', vous pouvez utiliser le code:
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;
});
Vous pouvez prolonger la lame comme ceci:
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; ?>";
});
Vous pouvez ensuite utiliser les éléments suivants:
@switch($test)
@case(1)
Words
@break
@case(2)
Other Words
@break
@default
Default words
@endswitch
Cependant, notez les avertissements dans: http://php.net/manual/en/control-structures.alternative-syntax.php
S'il y a des espaces blancs entre switch (): et le premier cas, le bloc de code entier échouera. Il s’agit d’une limitation de PHP plutôt que d’une limitation de lame. Vous pourrez peut-être le contourner en forçant la syntaxe normale, par exemple:
Blade::directive('switch', function ($expression) {
return "<?php switch($expression) { ?>";
});
Blade::directive('endswitch', function ($) {
return "<?php } ?>";
});
Mais cela semble un peu faux.