php – Codeigniter中的路由 – 自动

前端之家收集整理的这篇文章主要介绍了php – Codeigniter中的路由 – 自动前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有Codeigniter路线的问题.我希望我网站上的所有注册用户都有自己的“目录”,例如:www.example.com/username1,www.example.com/username2.该“目录”应映射到控制器“polica”,方法“ogled”,参数“username1”.

如果我喜欢这样,那么每个控制器都映射到这条路线:“polica / ogled / parameter”.不行:

$route["(:any)"] = "polica/ogled/$1";

这有效,但我总是在routes.PHP中手动输入信息:

$route["username1"] = "polica/ogled/username1";

我如何做到这一点,这将自动化?

更新:
例如,我有控制器名称广告.例如,如果您访问www.example.com/ads/
会有列出的广告.如果您访问www.example.com/username1,则会按用户username1列出广告.还有控制器用户,个人资料,最新,……

我的当前routes.PHP

$route['oglasi'] = 'oglasi';
$route['(:any)'] = "polica/ogled/$1"
$route['default_controller'] = 'domov';
$route['404_override'] = '';

解决了这段代码的问题:

$route['oglasi/(:any)'] = 'oglasi/$1';
$route['(:any)'] = "polica/ogled/$1"
$route['default_controller'] = 'domov';
$route['404_override'] = '';

此致,马里奥

你的路线的问题是,通过使用:任何你匹配,实际上…任何路线,所以你几乎卡在那里.
我想你可能有两个解决方案:

1)您可以选择性地重新路由所有站点控制器,例如:

$route['aboutus'] = "aboutus";
$route['where-we-are'] = "whereweare";
//And do this for all your site's controllers
//Finally:
$route['(:any)'] = "polica/ogled/$1";

所有这些路线必须在任何之前出现,因为它们按照它们出现的顺序被读取,并且如果你放置:任何在开头它将很乐意跳过所有其余的路线.

评论后编辑:

我的意思是,如果您要与任何段匹配,这意味着您根本不能使用任何控制器(默认情况下,这是第一个URI段),因为路由器将始终使用您的路由器重新路由您定义的法律.
为了允许CI执行其他控制器(无论它们是什么,我只是使用了一些常见的网页,但实际上可以是一切),您需要通过将它们从重新路由中排除来允许它们.你可以通过在任何规则之前放置它们来实现这一点,这样每次CI通过你的路由规则时,它首先解析你“转义”的那个,并且只有当它们与URL上找到的任何内容不匹配时,它才会传递给它到:任何规则.

我知道这仍然是代码冗长,但正如你所说,它们肯定会低于6K.
由于我不知道您的URL和Web应用程序的实际结构,因此它是我想到的唯一解决方案.如果您提供更多信息,例如如何塑造您应用的常规网址,那么我可以更新我的答案

/结束编辑

这不是一个实用的解决方案,因为它需要大量的代码,但是如果你想要这样的设计,这是我想到的唯一方法.
此外,考虑你可以使用正则表达式作为$route索引,但我不认为它可以在这里工作,因为你的用户名不太可能以这种方式匹配,但我只想指出可能性.

要么

2)你可以稍微改变你的设计模式,并为用户名分配另一条路线,这是一条沿线的

$route['user/(:any)'] = "polica/ogled/$1";

这将产生相当漂亮(和语义)的URL,并且将避免逃避其他路由的所有麻烦.

猜你在找的PHP相关文章