切换Laravel 5 - 刀片

ven*_*uil 72 php switch-statement laravel blade laravel-5

如何在刀片模板中使用switch?我用的时候:

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

结果我将此文本视为明文.我更喜欢在几段代码中使用switch,因为它比我使用if时更干净.

但如果不可能只写它.

Mar*_*ala 111

更新2019答​​案

从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
Run Code Online (Sandbox Code Playgroud)

较旧的答案

不幸的是,Laravel Blade没有switch语句.您可以使用Laravel if else方法或使用普通的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
Run Code Online (Sandbox Code Playgroud)


小智 29

您只需在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;
    });
Run Code Online (Sandbox Code Playgroud)

然后你可以用作:

@switch( $item )
    @case( condition_1 )
        // do something
    @breakswitch
    @case( condition_2 )
        // do something else
    @breakswitch
    @default
        // do default behaviour
    @breakswitch
@endswitch
Run Code Online (Sandbox Code Playgroud)

享受吧〜

  • 自这些评论以来有人投票?这有用吗? (5认同)

cap*_*ack 22

在LARAVEL 5.2及以上:

在开始和结束PHP语句之间编写常用代码.

@php
switch (x) {
    case 1:
        //code to be executed
        break;
    default:
        //code to be executed
}
@endphp
Run Code Online (Sandbox Code Playgroud)

  • 这个@php语法在L5.2中非常有用&gt; (2认同)

小智 5

在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;
    }
?>
Run Code Online (Sandbox Code Playgroud)


Bad*_*der 5

现在已经在Laravel 5.5中构建了 https://laravel.com/docs/5.5/blade#switch-statements