我在拉雷维尔有一个项目,项目中有很多路线
但是我刚刚发现这些路线都是区分大小写的
/advertiser/reports与/advertiser/reports不同
所以我想要的是两个路由都应该重定向到同一个视图。目前
/advertiser/Reports给出RouteNotFound异常
我已经读过关于Route::pattern()的方法,但是由于有很多路线,我必须为此付出很多努力。所以,我想要的是更好的方法,如果有的话
为了使路由不区分大小写,您需要修改路由与URL匹配的方式。在Laravel中,这一切都发生在UriValidator对象中,因此您需要创建自己的验证器
幸运的是,与Laravel中的大多数任务一样,它并不复杂
首先,创建新的验证器类-此类与原始类之间的唯一区别在于,您将在正则表达式的末尾为已编译的路由添加i修饰符,以启用不区分大小写的匹配
<;?php名称空间\namespace;
使用\Http\Request;
使用照明\路由\路由;
使用照明\路由\匹配\验证接口;
类CaseInsensitiveUriValidator实现了Validator接口
{
公共功能匹配(路由$Route,请求$Request)
{
$path=$request->;path();
返回preg_match(preg_replace(“/$/”、“i”、$route->;getCompiled()->;getRegex())、rawurldecode($path));
}
}
其次,您需要更新用于将URL与路由匹配的匹配器列表,并用您的替换原始的UriValidator
为此,请在routes.php文件的顶部添加以下内容:
<;?php
使用照明\路由\路由作为照明路由;
使用\Namespace\CaseInsensitiveUriValidator;
使用Illumb\Routing\Matching\UriValidator;
$validators=IlluminateRoute::getValidators();
$validators[]=新的案例不敏感Eurivalidator;
IlluminateRoute::$validators=数组\过滤器($validators,函数($validator){
return get_class($validator)!=UriValidator::class;
});
这将删除原始验证器,并将您的验证器添加到验证器列表中
请记住,此代码尚未通过运行测试。让我知道如果有任何打字错误或东西不符合预期的工作。我将非常高兴为您工作:)