CodeIgniter 不支持自定义占位符(如 :slug、:uuid),仅预置 (:any)、(:num) 等,推荐用正则表达式实现等效功能;CI3 和 CI4 均需通过正则捕获组匹配 slug、UUID、PDF 文件等,CI4 更是完全弃用 $route 数组且不提供占位符扩展接口。

CodeIgniter 本身不支持用户自定义占位符(比如自己写 :slug 或 :uuid),它只预置了几个标准通配符:(:any)、(:num)、(:alpha)、(:alphanum)。但你可以通过正则表达式实现等效的“自定义占位符”效果,这是官方推荐且最稳妥的做法。
用正则替代自定义占位符
CI3 和 CI4 都允许在路由规则中直接使用正则捕获组,比依赖占位符更灵活、更可控。
-
$route['post/([a-z0-9\-]+)'] = 'blog/view/$1';→ 匹配小写字母、数字、短横线组成的 slug(如/post/welcome-to-ci4) -
$route['user/([0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})'] = 'users/show/$1';→ 精确匹配 UUID v4 格式 -
$route['file/([^\s]+\.pdf)'] = 'files/download/$1';→ 匹配以 .pdf 结尾的文件名(注意点号要转义)
CI4 中必须用正则,不能扩展占位符语法
CI4 的路由系统已完全弃用 $route 数组,改用 $routes->get() 等方法,且不提供注册新占位符的接口。所有“类占位符”行为都需靠正则实现:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 错误写法:
$routes->get('api/user/:uuid', 'Users::show');(:uuid不会被识别) - 正确写法:
$routes->get('api/user/([0-9a-f]{32})', 'Users::show/$1');或带命名捕获:$routes->get('api/user/([0-9a-f]{32})', ['as' => 'user.show', 'uses' => 'Users::show']);
注意事项:顺序和转义很关键
正则路由不是写完就生效,要注意两点:
- 泛化规则(如含
(.*)或(:any))必须放在具体规则之后,否则会提前截断请求 - 特殊字符如
.、?、+、-在字符组内或外都要正确转义,否则可能匹配异常或报错 - CI3 中正则捕获用
$1、$2引用;CI4 中推荐用闭包方式处理参数,避免硬编码索引
本质上,所谓“自定义占位符”,就是用正则写清楚你要匹配什么——这不是限制,而是让规则更明确、更可维护。


















