如何配置Codeigniter路由以忽略URL中的特定段字符串

时间:2010-07-01 04:25:33

标签: codeigniter

我不确定我是否会走这条路 - 而且我对路由很陌生,所以如果这是基础,我道歉。

我想要实现的是在页面底部有一个链接,网站访问者可以选择移动或全屏。我希望他们能够从任何页面执行此操作。当他们选择任何一个时,可能会发生任何数量的事情 - 取决于他们在网站上的位置(即不同的视图,功能等)。

现在,我没有配置Codeigniter来允许查询字符串,这是默认行为。所以为了在链接中传递首选项,我需要使用url段来完成它。

我希望做类似的事情:

<? if ($in_mobile_view): ?>
  Mobile | <a href="<?= current_url() ?>/f">Full Site</a>
<? else: ?>
  <a href="<?= current_url() ?>/m">Mobile</a> | Full Site
<? endif ?>

当我导航到:/ welcome / index / m或/ calendar / view / m等时,这很有用。但是,如果我只是在:/ welcome / m或/ m - 其中索引方法为控制器应该启动,我得到404,因为它找不到方法 - 因为它不存在。

我的想法是通过路由,我可以配置Codeigniter忽略“m”和“f”字符串,只是操作就好像它们根本不在url中一样。

这是一个很好的方法吗?如果没有,我很乐意听到其他建议。如果这是一个不错的方式,我真的很感激,如果有人能指出我正确的路由方向。

感谢您的时间。

1 个答案:

答案 0 :(得分:3)

为什么选择这个URL?

您可以使用用户代理库检测基本“移动”。获取该值并将会话设置为用户代理建议的任何一个,然后只需链接到控制器,该控制器在单击时在移动版本和完整版本之间切换用户。

在全局代码中以钩子或Base Controller运行此命令。

if($this->user_agent->is_mobile() && ! $this->session->userdata('site_mode'))
{
    $this->session->set_userdata('site_mode', $this->user_agent->is_mobile() ? 'mobile' : 'full');
}

然后你的控制器可以根据他们点击的内容将会话设置为任何内容。

/开关/移动
/开关/全