Как я могу использовать переключатель в шаблонах лезвий? Когда я использовал:
@switch($login_error)
@case(1)
`E-mail` input is empty!
@break
@case(2)
`Password` input is empty!
@break
@endswitch
в результате я вижу этот текст как открытый текст. Я предпочитаю использовать переключатель в нескольких фрагментах кода, потому что он для меня более понятен, чем когда я использую if.
Но если это невозможно, просто напишите.
Ответы:
Обновленный ответ 2020 г.
Начиная с Laravel 5.5 @switch встроен в Blade. Используйте его, как показано ниже.
@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
Старый ответ
К сожалению, в Laravel Blade нет оператора переключения. Вы можете использовать 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
источник
Вы можете просто добавить этот код в метод загрузки класса 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
& quot; концевой выключатель (T_ENDSWITCH) & quot; & # 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.5 https://laravel.com/docs/5.5/blade#switch-statements
источник
В 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; } ?>
источник
Вы можете удлинить лезвие так:
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
Если между switch (): и первым случаем есть пробелы, тогда весь блок кода завершится ошибкой. Это ограничение PHP, а не ограничение лезвия. Вы можете обойти это, используя обычный синтаксис, например:
Blade::directive('switch', function ($expression) { return "<?php switch($expression) { ?>"; }); Blade::directive('endswitch', function ($) { return "<?php } ?>"; });
Но это немного неправильно.
источник
Чтобы преодолеть пробел в 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; });
источник
Когда вы начинаете использовать операторы switch в своих представлениях, это обычно указывает на то, что вы можете дополнительно перефакторить свой код. Бизнес-логика не предназначена для представлений, я бы предпочел предложить вам сделать оператор switch в вашем контроллере, а затем передать результат операторов switch в представление.
источник