在 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 中使用连字符 (-) 代替斜线 (/) 或下划线 (_)的主要内容,如果未能解决你的问题,请参考以下文章

转义序列(反斜线)

Python入门教程第79篇 反斜线字符

为什么Symfony 5.1无法识别在“ routes.php”文件上配置的路由?

C#转义字符总结

为啥斜线在 JSON 中是可转义字符? [复制]

Shell中常用的引号