0

我正在开发一个 API,通过它我可以在我的网站和其他几个网站上嵌入国旗图像。

我正在接受3个参数,即

  1. 国家(国家名称 - ISO 代码或全名)
  2. 尺寸(图像尺寸)
  3. 类型(平面旗、闪亮圆形旗等样式...)

现在,一切设置正确,但仍停留在处理 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";
4

1 回答 1

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";

如果你想从你的标志类运行 index 方法,看起来就像你做的那样,你根本不想路由到欢迎类。然而,目前你是。您的路线应如下所示:

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

这样,Codeigniter 将从您的标志类运行 index 方法。您不必担心路线中的国家、大小或风格/类型。最好的选择是像这样使用 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

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

于 2014-01-16T17:22:59.577 回答