Interruptor en Laravel 5 – Blade

¿Cómo puedo usar el interruptor en las plantillas de hoja? Cuando utilicé:

@switch($login_error) @case(1) `E-mail` input is empty! @break @case(2) `Password` input is empty! @break @endswitch 

en resultado, veo este texto como texto sin formato. Prefiero usar el interruptor en pocos fragmentos de código porque es más limpio para mí que cuando uso if.

Pero si no es posible, solo escríbelo.

Actualización de la versión 2018

Desde Laravel 5.5, el @switch está integrado en la Blade. Úselo como se muestra a continuación.

 @switch($login_error) @case(1)  `E-mail` input is empty! @break @case(2) `Password` input is empty! @break @default Something went wrong, please try again @endswitch 

Respuesta anterior

Desafortunadamente Laravel Blade no tiene statement de cambio. Puedes usar Laravel si no te acercas o utilizas el uso de un simple modificador de PHP. Puede utilizar PHP simple en plantillas blade como en cualquier otra aplicación PHP. A partir de Laravel 5.2 y posteriores utilice la instrucción @php.

Opción 1:

 @if ($login_error == 1) `E-mail` input is empty! @elseif ($login_error == 2) `Password` input is empty! @endif 

Puede agregar estos códigos en el método de arranque de la clase AppServiceProvider.

 Blade::extend(function($value, $compiler){ $value = preg_replace('/(\s*)@switch\((.*)\)(?=\s)/', '$1', $value); $value = preg_replace('/(\s*)@case\((.*)\)(?=\s)/', '$1case $2: ?>', $value); $value = preg_replace('/(?<=\s)@default(?=\s)/', 'default: ?>', $value); $value = preg_replace('/(?<=\s)@breakswitch(?=\s)/', ' 

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 ~

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 

En Laravel 5.1, esto funciona en una Blade:

 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; } ?> 

Esto ahora está construido en Laravel 5.5 https://laravel.com/docs/5.5/blade#switch-statements

Puede extender la cuchilla así:

  Blade::directive('switch', function ($expression) { return ""; }); Blade::directive('case', function ($expression) { return ""; }); Blade::directive('break', function () { return ""; }); Blade::directive('default', function () { return ""; }); Blade::directive('endswitch', function () { return ""; }); 

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 espacios en blanco entre el interruptor (): y el primer caso, entonces todo el bloque de código fallará. Esa es una limitación de PHP en lugar de una limitación de blade. Puede pasar por alto forzando la syntax normal, por ejemplo:

 Blade::directive('switch', function ($expression) { return ""; }); Blade::directive('endswitch', function ($) { return ""; }); 

Pero esto se siente un poco mal.

Para superar el espacio en ‘switch ()’, puede usar el código:

 Blade::extend(function($value, $compiler){ $value = preg_replace('/(\s*)@switch[ ]*\((.*)\)(?=\s)/', '$1', $value); $value = preg_replace('/(\s*)@case[ ]*\((.*)\)(?=\s)/', '$1case $2: ?>', $value); $value = preg_replace('/(?<=\s)@default(?=\s)/', 'default: ?>', $value); $value = preg_replace('/(?<=\s)@breakswitch(?=\s)/', ' 

Cuando comienzas a usar declaraciones de cambio dentro de tus vistas, eso generalmente indica que puedes volver a factorizar tu código. La lógica empresarial no está pensada para vistas, prefiero sugerirle que haga la statement de cambio dentro de su controlador y luego pase el resultado de las declaraciones de cambio a la vista.