用斜线分隔它们怎么样?
// www.sitename.com/[COMPANY NAME]/medicine/[DISEASE]
Router::connect('/:company/medicine/:disease', array('controller' => 'diseases', 'action' => 'index'),
array('pass'=>array('company','disease'),
'company'=>"[a-zA-Z\.]+*",
'disease'=>'[a-zA-Z\.]+'));
和控制器
function diseases($company,$disease){
}
我不确定您是否可以使用下划线代替斜线,我以前从未尝试过。如果你尝试,我想知道结果 =)
祝你好运
已编辑:好的,我对这个问题太好奇了,我写了一个这样的路线
Router::connect('/:company_medicine_:disease', array('controller' => 'pages', 'action' => 'test'),
array('pass'=>array('company','disease'),
'company'=>'[a-zA-Z]+',
'disease'=>'[a-zA-Z]+'));
它不工作u_U
正如我所怀疑的,问题在于 Cake 认为 custom route element 的名称是 :company_medicine 而不是 :company.. 几分钟后关于/阅读 Cake 的代码我发现了确切的位置Cake 解析路由并提取传递元素的名称。它在 /cake/libs/router.php 类 CakeRoute 中,方法 _writeRoute() (大约第 1369 行):
preg_match_all('#:([A-Za-z0-9_-]+[A-Z0-9a-z])#', $parsed, $namedElements);
正如你在正则表达式中看到的,元素的名称可以包含下划线,因此 Cake 认为参数的名称是“:company_medicine”。
所以你有四个解决方案:
- 使用斜杠作为 URL 的分隔符
- 更改参数的顺序,使其为
medicine_[COMPANY]_[DISEASE]
-
将 router.php 的第 1369 行修改为此(不推荐,我认为它会破坏插件的路由):
preg_match_all('#:([A-Za-z0-9]+)#', $parsed, $namedElements);
在 .htaccess 中使用 url rewrite 将所有 [COMPANY]_medicine_[DISEASE] 重定向到 [COMPANY]/medicine/[DISEASE],因此 cake 将看到它被斜线分隔,浏览器将看到它分隔 bu 下划线。 (我还没有测试过,我从来没有为 Cake =P 的 .htaccess 添加另一个规则)