Dragon
主机之家测评主机之家测评  2019-08-23 05:34 主机之家测评 隐藏边栏 |   抢沙发  3 
文章评分 0 次,平均分 0.0

ThinkPHP5 路由别名定义无效,route.php 文件定义如下:

  return [      'admin' => 'admin/Index/index',      'admin/login' => 'admin/Login/index',      'admin/logout' => 'admin/Login/logout',      '__alias__' =>  [          'admin/activity'  =>  'admin/Activity',      ],  ];

模板中 url 生成代码:

  {:url('admin/Activity/index')}

生成的 url:

  http://localhost/admin/activity/index

按照手册提示,使用路由别名后,可以批量定义一的路由规则,此时访问 admin 模块的 Activity 控制器的所有操作都可以直接访问,比如:

  http://localhost/admin/activity/index => admin/Activity/index  http://localhost/admin/activity/add => admin/Activity/add

然而事实上在我的代码中路由别名定义并未生效,访问 http://localhost/admin/activity/index 指向的是默认的 admin/Index/index,仔细查看了一下 tp5 的官方手册找到了 ThinkPHP5 路由别名无效的原因。

在 ThinkPHP5 中路由默认规则匹配检测的时候只是对 URL 从头开始匹配,只要 URL 地址包含了定义的路由规则就会匹配成功,如果希望完全匹配,可以在路由表达式最后使用$符号。

而在我的路由配置文件中,先定义了 'admin' => 'admin/Index/index',规则,而这个规则只要 URL 地址并不是完全匹配,所以只要 URL 地址包含了定义的路由规则就会匹配成功,因此访问 http://localhost/admin/activity/index 指向的是默认的 admin/Index/index。

修改一下路由匹配规则,加上完全匹配设置即可,规则如下:

  return [      'admin/$' => 'admin/Index/index',//加上/$即可      'admin/login' => 'admin/Login/index',      'admin/logout' => 'admin/Login/logout',      '__alias__' =>  [          'admin/activity'  =>  'admin/Activity',      ],  ];

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

发表评论

扫一扫二维码分享