在CodeIgniter 4中,可以通过自定义占位符在路由定义中使用正则表达式模式。
我试图让我的URI路由定义更易于开发,但它不起作用:
$routes->group('files', ['namespace' => 'ModulesFiles'], function ($routes) {
$routes->addPlaceholder('userID', '(d+)');
$routes->addPlaceholder('firstFolderLetter', '[c|e|u|s|p]{1}');
$routes->addPlaceholder('fileAction', '[o|d|r]{1}');
$routes->addPlaceholder('fileID', '(d+)');
// How should this be? Doesn't work.
$routes->get(
'test/(:userID)/(:fileAction)/(:firstFolderLetter)/(:fileID)',
'Files_Controller::getProjectFile/$1/$2/$3/$4'
);
// This one works.
$routes->get(
'test/(:userID)/(:any)/(:firstFolderLetter)/(:num)',
'Files_Controller::getProjectFile/$1/$2/$3/$4'
);
});
当我尝试第一个URI路由定义时,我无法访问我想要的URL(应该如何?不起作用(。如果我插入";默认">路由部件它工作得很好。
我不是正则表达式专家。也许不可能两次插入相同的正则表达式模式('(\d+('(?
解决方案
- 而不是:❌
$routes->addPlaceholder('userID', '(d+)');
使用此选项:✅$routes->addPlaceholder('userID', 'd+');
- 而不是:❌
$routes->addPlaceholder('fileID', '(d+)');
使用此选项:✅$routes->addPlaceholder('fileID', 'd+');
自定义占位符
$routes->addPlaceholder(placeholder: $placeholder, pattern: $pattern);
->addPlaceholder(...)
方法的第二个参数不应该用括号括起来。