Как я могу использовать переключатель в шаблонах клинков? Когда я использовал:
@switch($login_error)
@case(1)
`E-mail` input is empty!
@break
@case(2)
`Password` input is empty!
@break
@endswitch
В результате я вижу этот текст в виде открытого текста. Я предпочитаю использовать переключатель в нескольких частях кода, потому что он более чист для меня, чем когда я использую if.
Но если это невозможно, просто напишите.
К сожалению, у Laravel Blade нет оператора switch. Вы можете использовать Laravel, если другой подход или использование использует простой PHP-переключатель. Вы можете использовать простой PHP в шаблонах клинков, как в любом другом приложении PHP. Начиная с Laravel 5.2 и выше, используйте инструкцию @php.
Вариант 1:
@if ($login_error == 1)
`E-mail` input is empty!
@elseif ($login_error == 2)
`Password` input is empty!
@endif
Вариант 2:
@php
switch ($login_error) {
case 1:
echo "`E-mail` input is empty!";
break;
case 2:
echo "`Password` input is empty!";
}
@endphp
Вариант 3:
<?php
switch ($login_error) {
case 1:
echo "`E-mail` input is empty!";
break;
case 2:
echo "`Password` input is empty!";
}
?>
Вы можете просто добавить этот код в метод загрузки класса 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;
});
то вы можете использовать его как:
@switch( $item )
@case( condition_1 )
// do something
@breakswitch
@case( condition_2 )
// do something else
@breakswitch
@default
// do default behaviour
@breakswitch
@endswitch
Наслаждайтесь этим ~
parse error, expecting
"конечного переключателя (T_ENDSWITCH)" & # 039; или "case (T_CASE)"' or
& quot; default (T_DEFAULT) `
В LARAVEL 5.2 И ВВЕРХ:
Напишите свой обычный код между операциями открытия и закрытия PHP.
@php
switch (x) {
case 1:
//code to be executed
break;
default:
//code to be executed
}
@endphp
@php
очень полезен в L5.2>
В Laravel 5.1 это работает в 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;
}
?>
Это теперь построено в Laravel 5.5 https://laravel.com/docs/5.5/blade#switch-statements
Чтобы преодолеть пробел в 'switch()', вы можете использовать код:
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;
});
Вы можете растягивать лезвие так:
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; ?>";
});
Затем вы можете использовать следующее:
@switch($test)
@case(1)
Words
@break
@case(2)
Other Words
@break
@default
Default words
@endswitch
Однако обратите внимание на предупреждения в: http://php.net/manual/en/control-structures.alternative-syntax.php
Если между переключателем() есть пробелы: и первый случай, то весь блок кода завершится с ошибкой. Это ограничение PHP, а не ограничение лезвия. Вы можете обойти его, вызывая нормальный синтаксис, например:
Blade::directive('switch', function ($expression) {
return "<?php switch($expression) { ?>";
});
Blade::directive('endswitch', function ($) {
return "<?php } ?>";
});
Но это немного неправильно.
Когда вы начинаете использовать операторы switch в своих представлениях, это обычно указывает на то, что вы можете еще раз изменить свой код. Бизнес-логика не предназначена для представлений, я бы предпочел предложить вам сделать оператор switch внутри вашего контроллера, а затем передать результат утверждения коммутатора в представление.