自定义路线不工作| Codeigniter路由

时间:2013-10-25 17:53:45

标签: php codeigniter routing url-routing

我正在开发一个API,我通过它在我的网站上嵌入了国家标志的图像。其他几个。

我正在接受3个参数,即

  1. 国家/地区(国家名称 - ISO代码或全名)
  2. 尺寸(图像尺寸)
  3. 类型(平旗,闪亮圆旗等样式......)
  4. 现在,让所有设置都正确但仍然处理URI。

    Controller -> flags.php
    Function -> index()
    

    我现在拥有的是:

    http://imageserver.com/flags?country=india&size=64&style=round
    

    我想要什么

    http://imageserver.com/flag/india/64/round
    

    我浏览了一些文章并制定了这条路线,但所有这些失败

    $route['flag/(:any)/(:num)/(:any)'] = "welcome/index/country/$1/size/$2/style/$3";
    $route['flag/(:any)/(:num)/(:any)'] = "welcome/index/$1/$2/$3";
    $route['flag/(:any)/(:num)/(:any)'] = "welcome/index?country=$1&size=$2&style=$3";
    

1 个答案:

答案 0 :(得分:0)

编写自定义cms时,我也遇到了路径问题。通过阅读您的问题,我看到了一些问题,这些问题可能就是您正在寻找的答案。

对于初学者,让我们来看看你尝试的路线:

$route['flag/(:any)/(:num)/(:any)'] = "welcome/index/country/$1/size/$2/style/$3";
$route['flag/(:any)/(:num)/(:any)'] = "welcome/index/$1/$2/$3";
$route['flag/(:any)/(:num)/(:any)'] = "welcome/index?country=$1&size=$2&style=$3";

如果要从flags类运行index方法(看起来像这样),则根本不想路由到welcome类。但是,目前,你是。您的路线应如下所示:

$route['flag/(:any)/(:num)/(:any)'] = "flags/index";

这样,Codeigniter将从您的flags类运行索引方法。您不必担心路线中的国家/地区,大小或样式/类型。最好的选择是使用URI段函数,如下所示:

$country = $this->uri->segment(2); //this would return India as per your uri example.
$size = $this->uri->segment(3); //this would return 64 as per your uri example.
$style = $this->uri->segment(4); //this would return round as per your uri example.

然后,您可以使用这些变量来查询数据库并获取正确的标记或其他您需要使用的标记。

所以重申我的答案,并解释为什么:

您当前正在运行欢迎控制器/类以及该控制器/类的索引函数/方法的路由。显然,这不是你想要的。所以你需要确保你的路线指向正确的控制器和功能,就像我上面所做的那样。 URI的额外段不需要在您的路由声明中,因此您只需使用uri_segment()函数来获取每个段的值并使用它们执行所需的操作。

我希望这会对你有所帮助。我可能没有找到我的问题的答案,但至少我可以为别人提供答案。如果您对此感到困惑,请查看http://ellislab.com/codeigniter/user-guide处的用户指南。您需要的主要链接是:

http://ellislab.com/codeigniter/user-guide/libraries/uri.html

http://ellislab.com/codeigniter/user-guide/general/routing.html

如果您需要更多帮助或者这有助于解决您的问题,请告诉我。