我试图找到一种方法,在网址不在根域时,将网址路由到相应的控制器。
例如:
site.com/@username
- 应该转到用户控制器site.com/uk/london
- 应该转到国家/地区控制器site.com/fr/paris
- 应该转到国家/地区控制器site.com/bobs-farm
- 应该去Farms controller ......等等。
说site.com/users/username
这很容易,但在这种情况下并不好。
我需要做的是将params传递给一个控制器,检查它是否匹配,如果是,请处理 - 否则将其传递给下一个控制器,看看它是否适合那里,依此类推。 / p>
我可以将所有东西都强行放入一个巨大的全能控制器中,但是可能会有太多的事情发生,而且它太过笨重了。有没有办法解决这个问题?
答案 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 ..
它可能非常可怕,但到目前为止效果很好。如果有更好的方法,我尽管都是耳朵!