拉拉维尔 5 中的开关 - 刀片

如何在刀片式服务器模板中使用交换机?当我使用时:

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

结果,我看到这个文本是明文。我更喜欢在几段代码中使用switch,因为它对我来说比我使用if时更干净。

但如果不可能,就写出来。


答案 1

更新的2020年答案

从Laravel 5.5开始,@switch内置于Bladage中。使用它,如下所示。

@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语句。您可以使用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

只需在 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

好好享受吧~


推荐