Laravel 5 - Blade中的开关语句

7 浏览
0 Comments

Laravel 5 - Blade中的开关语句

如何在Blade模板中使用switch语句?当我使用以下代码时:

@switch($login_error)
    @case(1)
        `E-mail`输入为空!
        @break
    @case(2)
        `Password`输入为空!
        @break
@endswitch

结果中我看到的是纯文本。我更喜欢在代码中使用switch语句,因为对我来说比使用if更清晰。

但如果不可能的话,请使用if语句来写。

0
0 Comments

在Laravel 5.2及更高版本中,使用switch语句时,需要将常规代码放在PHP语句的开头和结尾之间。以下是一个示例:

switch (x) {
    case 1:
        //要执行的代码
        break;
    default:
        //要执行的代码
}

这种语法在Laravel 5.2及更高版本中非常有用。

0
0 Comments

Switch在Laravel 5中的原因是因为Laravel Blade模板引擎不支持switch语句。然而,我们可以通过使用if else的方法来达到相同的效果,或者在Blade模板中使用纯PHP的switch语句。

解决方法如下:

1. Laravel 5.5以后版本,可以直接在Blade中使用@switch语句来实现switch的功能。示例如下:

@switch($login_error)
    @case(1)
        E-mail input is empty!
        @break
    @case(2)
        Password input is empty!
        Something went wrong, please try again
        @break
    @default
        Default case
@endswitch

2. 在Laravel 5.2及以上版本,我们可以使用纯PHP的switch语句来实现相同的功能。示例如下:

@php
    switch($login_error) {
        case 1:
            echo "E-mail input is empty!";
            break;
        case 2:
            echo "Password input is empty!";
            echo "Something went wrong, please try again";
            break;
        default:
            echo "Default case";
    }
@endphp

这样就可以在Laravel的Blade模板中实现类似switch的功能了。

0
0 Comments

在Laravel 5中,使用Blade模板引擎实现Switch语句的功能时,出现了一些问题。为了解决这个问题,可以在AppServiceProvider类的boot方法中添加以下代码:

Blade::extend(function($value, $compiler){
    $value = preg_replace('/(\s*)\((.*)\)(?=\s)/', '$1<?php switch($2):', $value);
    $value = preg_replace('/(\s*)(?=\s)/', '$1endswitch; ?>', $value);
    $value = preg_replace('/(\s*)\((.*)\)(?=\s)/', '$1case $2: ?>', $value);
    $value = preg_replace('/(?<=\s)(?=\s)/', 'default: ?>', $value);
    $value = preg_replace('/(?<=\s)(?=\s)/', '<?php break;', $value);
    return $value;
});

然后,可以按照以下方式使用Switch语句:

( $item )
    ( condition_1 )
        // do something
    ( condition_2 )
        // do something else
        // do default behaviour

但是,有用户报告说这种方法不起作用,并出现了解析错误。有人建议将preg_replace方法中的单引号替换为双引号,以解决这个问题。还有人问其他用户是否遇到过类似问题,并且这种解决方法是否有效。

另外,有人报告在使用Laravel 5.4时遇到了致命错误,显示找不到App\Providers\Blade类。但是,有人表示在Laravel 5.5中成功使用了这种方法,并对如何使phpstorm自动完成(或任何其他IDE)产生兴趣。

总之,通过在AppServiceProvider类的boot方法中添加一些代码,可以在Laravel 5中使用Blade模板引擎实现Switch语句的功能。然而,可能会遇到一些问题,需要根据具体情况进行调试和解决。

0