在 Routes 中使用连字符 (-) 代替斜线 (/) 或下划线 (_)
Posted
技术标签:
【中文标题】在 Routes 中使用连字符 (-) 代替斜线 (/) 或下划线 (_)【英文标题】:Use hyphen(-) instead of slash(/) or underscore( _ ) in Routes 【发布时间】:2016-09-20 00:27:28 【问题描述】:我正在使用 Codeigniter 3.x,使用 routes.php 我想创建动态路由,例如我有一个类名 Class1
。
我想要输出网址
mysite.com/Class1-Student-Search
但是使用连字符(-)不起作用
如果我放一个斜杠(/),它会起作用,
$route['(:any)/Student-Search'] = "search";
返回
mysite.com/Class1/Student-Search
并且使用下划线 (_) 也可以。
$route['(:any)_Student-Search'] = "search";
返回
mysite.com/Class1_Student-Search
但是我想使用连字符(-),如果我输入它会进入404错误页面,我使用了这四个解决方案但不适合我。
$route['(:any)-Student-Search'] = "search";
$route['([a-zA-Z]+)-Student-Search'] = "search";
$route['([a-zA-Z-0-9]+)-Student-Search'] = "search";
$route['(.*)-Student-Search'] = "search";
如果我硬编码路线中的值
$route['Class1-Student-Search'] = "search";
然后它也可以工作
【问题讨论】:
您是否将$route['translate_uri_dashes'];
设置为TRUE
??
是的,我设置了@Saty
这是一个正则表达式。尝试逃脱他们:\\-Student\\-Search
检查这个基于LINK点破折号的网址
还有this
【参考方案1】:
如果您看到下面的 codeigniter 流程图,您会理解我的意思。
你也可以在codeigniter官方website看到这个图表
当您尝试重定向或调用某个 url 时,它的工作原理是这样的
每个请求都会先路由到那里,因为你不能让它动态
【讨论】:
Codeigniter 官方网站现在是codeigniter.com,你现在可以在这里找到这两个文档codeigniter.com/docs Ellislab 不再处理 CI。但由于某种原因,它们仍然有链接。【参考方案2】:这是我的解决方案,它对我有用,这样做。
$route['(:any)-Student-Search'] = "search";
然后在您的链接按钮中,希望在您的视图中,像这样链接链接。
href="/<?php echo $row->classname; ?>-Student-Search"
关键是你不仅要制作你的路线,还要在你的href链接中添加后缀。
【讨论】:
这是什么意思 (:any) 在你的回答中意味着你的电话首先进入 routs 然后 routs 检查去任何卡拉斯。那家伙想打电话给头等舱然后路由,这在codeigniter中是不可能的 (:any) 表示他通过的实际id,路由会检查id号然后去上课。他可以将 id 传递给路由,然后查询数据,并加载它的相关细节。 仔细阅读问题,他希望将请求发送到他想要定义某些功能的某个类,然后击溃这是不可能的。以上是关于在 Routes 中使用连字符 (-) 代替斜线 (/) 或下划线 (_)的主要内容,如果未能解决你的问题,请参考以下文章