我在codegniter 4中有以下路由
$routes->add('/sample/(:any)/(:any)', 'Site/CountryController::addEdit/$1/$2');
http://localhost/sample/1/1
给我404错误。但是,如果我像下面这样删除$符号,它会工作得很好
$routes->add('/sample/(:any)/(:any)', 'Site/CountryController::addEdit/1/2');
它不需要美元符号,因为你实际上总是将整数1
和2
传递到Controller方法中,不管占位符的正则表达式是什么。
我认为你的问题是http://localhost/sample/1/1
不匹配路由/sample/(:any)/(:any)
,它匹配/sample/(:any)
。(:any)
占位符实际上可以覆盖任何东西,甚至多个片段。
因此,将路由定义为.../(:any)/(:any)
在语义上是毫无意义的,因为第一个(:any)
将捕获所有内容,使第二个(:any)
占位符完全无用。正如您现在所定义的那样,sample/
之外的整个URI将通过第一个占位符传递到$1
。你永远不会有一个值来填充$2
。
在我看来,你真的想把这个占位符限制在(:segment)
,而不是(:any)
。