高级路由以检查Codeigniter中的多个控制器

时间:2017-07-21 09:43:43

标签: php codeigniter codeigniter-3

我试图找到一种方法,在网址不在根域时,将网址路由到相应的控制器。

例如:

  • site.com/@username - 应该转到用户控制器
  • site.com/uk/london - 应该转到国家/地区控制器
  • site.com/fr/paris - 应该转到国家/地区控制器
  • site.com/bobs-farm - 应该去Farms controller

......等等。

site.com/users/username这很容易,但在这种情况下并不好。

我需要做的是将params传递给一个控制器,检查它是否匹配,如果是,请处理 - 否则将其传递给下一个控制器,看看它是否适合那里,依此类推。 / p>

我可以将所有东西都强行放入一个巨大的全能控制器中,但是可能会有太多的事情发生,而且它太过笨重了。有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:0)

对于国家/地区,至少在这个位置不要使用“英国”和“fr”。通常这些用于翻译页面。

表示@username:

$route['^@([a-zA-Z0-9_]+)$'] = "Users/index/$1"; // $1 param to controller contain the username.

for farm

$route['^bobs-farm$'] = "Users/Farm";

for country

$route['^(fr|uk)/([a-zA-Z0-9_-]+)$']  = "Country/index/$1/$2"; // $1 param to controller contain the iso3 and $2 the country

更新您的评论

到农场:

选项1:

$route['^farm/([a-zA-Z0-9_-]+)$'] = "Farm/detail/$1";

选项2

$route['^([a-zA-Z0-9_-]+)-farm$'] = "Farm/detail/$1";

答案 1 :(得分:0)

好的,所以我暂时找到了一些hacky解决方法。

routes.php中我得到了段,如果它是1段,请在farm表中进行检查,如果匹配,则添加路径。否则它继续默认路由。同样,对于2个细分,我会查看国家/地区数据。

我发现的一件事是与控制器同名的slu will会覆盖它。所以,为了更加苛刻,我拉出一个控制器列表,并确保在我生成路线之前没有一个slu ..

它可能非常可怕,但到目前为止效果很好。如果有更好的方法,我尽管都是耳朵!