Larabel 5의 스위치(블레이드)
블레이드 템플릿에서 스위치를 사용하려면 어떻게 해야 합니까?사용 시:
@switch($login_error)
@case(1)
`E-mail` input is empty!
@break
@case(2)
`Password` input is empty!
@break
@endswitch
결과적으로 나는 이 텍스트를 평문으로 본다.if를 사용할 때보다 더 깨끗하기 때문에 몇 가지 코드로 스위치를 사용하는 것을 선호합니다.
하지만 불가능하면 그냥 쓰세요.
2020년 답변 갱신
Larabel 5.5 이후 블레이드에는 @switch가 내장되어 있습니다.아래와 같이 사용합니다.
@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에는 switch 문이 없습니다.그 외의 어프로치에서는 Larabel을 사용하거나 플레인 PHP 스위치를 사용할 수 있습니다.블레이드 템플릿에서는 다른 PHP 애플리케이션과 마찬가지로 플레인 PHP를 사용할 수 있습니다.Larabel 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
즐기세요~
LARAVEL 5.2 이상:
PHP 문을 여는 것과 닫는 것 사이에 평소 코드를 쓰세요.
@php
switch (x) {
case 1:
//code to be executed
break;
default:
//code to be executed
}
@endphp
현재 Larabel 5.5 https://laravel.com/docs/5.5/blade#switch-statements에서 구축되었습니다.https://laravel.com/docs/5.5/blade#switch-statements
Larabel 5.1에서는 다음 기능이 블레이드로 동작합니다.
<?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 } ?>";
});
하지만 이건 좀 잘못된 느낌이야.
주제에서 벗어나지만 '케이스'가 문자열일 경우 큰따옴표를 사용합니다.@case("foo")
예상대로 작동하지 않습니다.그런 문제가 발생할 경우 작은 따옴표가 효과가 있는 것 같기 때문에@case("foo")
사용하다@case('foo')
아마 더 많은 정보를 가진 누군가가 이것을 밝혀줄 수 있을 것이다.
안부 전해요.
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 문의 결과를 뷰에 전달하는 것이 좋습니다.
언급URL : https://stackoverflow.com/questions/29897508/switch-in-laravel-5-blade
'programing' 카테고리의 다른 글
JavaScript 목록에 문자열이 있는지 확인합니다. (0) | 2022.09.27 |
---|---|
Keras, 각 레이어의 출력을 취득하려면 어떻게 해야 합니까? (0) | 2022.09.27 |
ClassLoader.getResources()를 올바르게 사용하는 방법 (0) | 2022.09.27 |
HTML과 Java를 효율적으로 해석하려면 어떻게 해야 하나요? (0) | 2022.09.27 |
@Query in Hibernate를 사용한 파라미터 네이티브 쿼리 (0) | 2022.09.27 |