¿Cómo puedo usar el interruptor en las plantillas blade? Cuando usé:
@switch($login_error)
@case(1)
`E-mail` input is empty!
@break
@case(2)
`Password` input is empty!
@break
@endswitch
en consecuencia, veo este texto como texto sin formato. Prefiero usar switch en algunos fragmentos de código porque es más limpio para mí que cuando uso if.
Pero si no es posible, escríbalo.
Respuestas:
Respuesta actualizada 2020
Desde Laravel 5.5, el @switch está integrado en Blade. Úselo como se muestra a continuación.
@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
Respuesta anterior
Desafortunadamente, Laravel Blade no tiene una declaración de cambio. Puede usar Laravel si se acerca o usar el modificador PHP simple. Puede usar PHP simple en plantillas blade como en cualquier otra aplicación PHP. A partir de Laravel 5.2, use la declaración @php.
Opción 1:
@if ($login_error == 1) `E-mail` input is empty! @elseif ($login_error == 2) `Password` input is empty! @endif
fuente
Puede simplemente agregar este código en el método de arranque de la clase 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; });
entonces puedes usar como:
@switch( $item ) @case( condition_1 ) // do something @breakswitch @case( condition_2 ) // do something else @breakswitch @default // do default behaviour @breakswitch @endswitch
Disfrútalo ~
fuente
parse error, expecting
& quot; interruptor final (T_ENDSWITCH) & quot; & # 039; o"case (T_CASE)"' or
& quot; predeterminado (T_DEFAULT) `EN LARAVEL 5.2 Y ARRIBA:
Escriba su código habitual entre las declaraciones PHP de apertura y cierre.
@php switch (x) { case 1: //code to be executed break; default: //code to be executed } @endphp
fuente
@php
sintaxis es muy útil en L5.2>Esto ahora está integrado en Laravel 5.5 https://laravel.com/docs/5.5/blade#switch-statements
fuente
En Laravel 5.1, esto funciona en un 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; } ?>
fuente
Puedes extender la hoja así:
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; ?>"; });
Luego puede usar lo siguiente:
@switch($test) @case(1) Words @break @case(2) Other Words @break @default Default words @endswitch
Sin embargo, tenga en cuenta las advertencias en: http://php.net/manual/en/control-structures.alternative-syntax.php
Si hay algún espacio en blanco entre switch (): y el primer caso, todo el bloque de código fallará. Esa es una limitación de PHP en lugar de una limitación de la hoja. Es posible que pueda omitirlo forzando la sintaxis normal, por ejemplo:
Blade::directive('switch', function ($expression) { return "<?php switch($expression) { ?>"; }); Blade::directive('endswitch', function ($) { return "<?php } ?>"; });
Pero esto se siente un poco mal.
fuente
Para superar el espacio en 'switch ()', puede usar el código:
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; });
fuente
Cuando comienza a usar declaraciones de cambio dentro de sus vistas, eso generalmente indica que puede volver a factorizar su código. La lógica empresarial no está pensada para las vistas, prefiero sugerirle que haga la instrucción de cambio dentro de su controlador y luego pase el resultado de las declaraciones de cambio a la vista.
fuente