CodeIgniter 3自定义路由以去除URL中controller字样的实现咨询
CodeIgniter 3自定义路由以去除URL中controller字样的实现咨询
嘿,我来帮你把这个问题理得明明白白!你现在的思路其实是对的,CodeIgniter 3的路由系统就是用来帮你把友好的URL映射到实际的控制器/方法上,从而隐藏掉控制器名称里的Controller后缀。
先给你拆解一下你已经写的路由:
- 你写的
$route['alt-text'] = 'AltTextController/index';:这已经实现了让用户访问你的域名/alt-text时,实际调用AltTextController的index方法,URL里完全看不到Controller字样,完美符合你的需求。而且因为index是CI控制器的默认方法,你还可以简化成$route['alt-text'] = 'AltTextController';,效果是一样的。 - 上传PDF的路由
$route['alt-text/upload'] = 'AltTextController/uploadPdf';:同样正确,用户访问你的域名/alt-text/upload时,会触发AltTextController的uploadPdf方法,URL里没有多余的后缀。 - 删除PDF的路由逻辑和上面一致,也是没问题的。
再看你那条User相关的路由$route['User/alt-text'] = 'UserController/AltText';:这条路由的作用是,当用户访问你的域名/User/alt-text时,会调用UserController的AltText方法,同样也隐藏了Controller后缀。这里提个小建议,URL一般推荐用小写(比如user/alt-text),CI的路由默认不区分大小写,所以不影响功能,但小写URL更符合规范。
如果你有很多控制器都需要去掉Controller后缀,不想一个个手动写路由,还可以用正则路由批量处理,比如在routes.php的末尾加上这两行:
// 匹配单个控制器路径,比如 /alt-text 映射到 AltTextController $route['([a-zA-Z0-9_-]+)'] = '$1Controller'; // 匹配带方法的路径,比如 /alt-text/upload 映射到 AltTextController/upload $route['([a-zA-Z0-9_-]+)/(:any)'] = '$1Controller/$2';
注意哦,这两行一定要放在所有自定义路由的后面!因为CI的路由是从上到下匹配的,先匹配到的规则会生效,把批量路由放后面就不会覆盖你之前写的特定路由了。
总结一下:你现在的路由写法已经完全实现了去除URL中Controller字样的需求,要是想更高效处理多个控制器,就用正则批量路由就行啦!
备注:内容来源于stack exchange,提问作者Abhinav Dubey
相关产品推荐
相关产品推荐

