programing

Larabel 5의 스위치(블레이드)

newsource 2022. 9. 27. 23:56

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