php – 如何使Laravel中的路由不区分大小写?
我有一个laravel项目,该项目有很多路线.
但我刚发现这些路线都是区分大小写的 所以我想要的是路由应该重定向到相同的视图.目前 我已经阅读了Route :: pattern()这样做的方法,但由于有许多路线,我将不得不付出很多努力.所以,我想要的是更好的方法,如果有的话.
为了使路由不区分大小写,您需要修改路由与URL匹配的方式.在Laravel中,这一切都发生在UriValidator对象中,因此您需要创建自己的验证器.
幸运的是,像Laravel中的大多数任务一样,它并不复杂. 首先,创建新的验证器类 – 这个和原始类之间的唯一区别是,您将在正则表达式的末尾附加i修饰符,以便编译路由以切换启用不区分大小写的匹配. <?php namespace YourNamespace; use IlluminateHttpRequest; use IlluminateRoutingRoute; use IlluminateRoutingMatchingValidatorInterface; class CaseInsensitiveUriValidator implements ValidatorInterface { public function matches(Route $route,Request $request) { $path = $request->path() == '/' ? '/' : '/'.$request->path(); return preg_match(preg_replace('/$/','i',$route->getCompiled()->getRegex()),rawurldecode($path)); } } 其次,您需要更新用于将URL匹配到路由的匹配器列表,并将原始UriValidator替换为您的路由器. 为此,请在routes.php文件的顶部添加以下内容: <?php use IlluminateRoutingRoute as IlluminateRoute; use YourNamespaceCaseInsensitiveUriValidator; use IlluminateRoutingMatchingUriValidator; $validators = IlluminateRoute::getValidators(); $validators[] = new CaseInsensitiveUriValidator; IlluminateRoute::$validators = array_filter($validators,function($validator) { return get_class($validator) != UriValidator::class; }); 这将删除原始验证器并将您的验证器添加到验证器列表中. 请记住,此代码尚未通过运行进行测试.如果有任何拼写错误或某些内容无法正常工作,请告诉我.我会非常乐意为你工作:) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |