php – 如何使Laravel中的路由不区分大小写?

php – 如何使Laravel中的路由不区分大小写?,第1张

概述我有一个laravel项目,该项目有很多路线. 但我刚发现这些路线都是区分大小写的 / advertiser / reports与/ advertiser / Reports不同. 所以我想要的是路由应该重定向到相同的视图.目前 / advertiser / Reports提供RouteNotFound异常. 我已经阅读了Route :: pattern()这样做的方法,但由于有许多路线,我将不得 我有一个laravel项目,该项目有很多路线.

但我刚发现这些路线都是区分大小写的
/ advertiser / reports与/ advertiser / Reports不同.

所以我想要的是路由应该重定向到相同的视图.目前
/ advertiser / Reports提供RouteNotFound异常.

我已经阅读了Route :: pattern()这样做的方法,但由于有许多路线,我将不得不付出很多努力.所以,我想要的是更好的方法,如果有的话.

为了使路由不区分大小写,您需要修改路由与URL匹配的方式.在Laravel中,这一切都发生在UriValIDator对象中,因此您需要创建自己的验证器.

幸运的是,像Laravel中的大多数任务一样,它并不复杂.

首先,创建新的验证器类 – 这个和原始类之间的唯一区别是,您将在正则表达式的末尾附加i修饰符,以便编译路由以切换启用不区分大小写的匹配.

<?PHP namespace Your\namespace;use Illuminate\http\Request;use Illuminate\Routing\Route;use Illuminate\Routing\Matching\ValIDatorInterface;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文件的顶部添加以下内容:

<?PHPuse Illuminate\Routing\Route as IlluminateRoute;use Your\namespace\CaseInsensitiveUriValIDator;use Illuminate\Routing\Matching\UriValIDator;$valIDators = IlluminateRoute::getValIDators();$valIDators[] = new CaseInsensitiveUriValIDator;IlluminateRoute::$valIDators = array_filter($valIDators,function($valIDator) {   return get_class($valIDator) != UriValIDator::class;});

这将删除原始验证器并将您的验证器添加到验证器列表中.

请记住,此代码尚未通过运行进行测试.如果有任何拼写错误或某些内容无法正常工作,请告诉我.我会非常乐意为你工作:)

总结

以上是内存溢出为你收集整理的php – 如何使Laravel中的路由不区分大小写?全部内容,希望文章能够帮你解决php – 如何使Laravel中的路由不区分大小写?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1264034.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存