Laravel 5 - Blade中的开关语句
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的功能了。
在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语句的功能。然而,可能会遇到一些问题,需要根据具体情况进行调试和解决。