用于多种方法的Codeigniter URI路由

时间:2015-10-18 11:01:23

标签: codeigniter-2

我正在开发codeigniter。控制器名称是“project”,有4个函数。“get_city_data”,“get_store_data”,“get_currency”,“get_description”。

我传递的2个函数的参数是 - get_city_data($ state,$ city),get_place_data($ state,$ city,$ store)。

所以在浏览器上渲染这些函数我分别使用url作为 -

http://localhost/project/get_city_data/state1/city1

我想更改网址 http://localhost/state1/city1

如果我定义了这样的路线,在routes.php中 $ route ['(:any)/(:any)'] ='project / get_city_data / $ 1 / $ 2'然后它反映了所有其他函数,但我想更改这两个函数的URL。

此外,我不想使用_remap功能,因为它不能很好地满足我的需求。

有人可以帮助我吗? THANKYOU

2 个答案:

答案 0 :(得分:0)

我建议您先检查数据库,然后确定所需的路线。这是我对你的要求的答案。

routes.php 中,尝试以下代码:

require_once( BASEPATH . 'database/DB' . EXT );

$url_source = $_SERVER['REDIRECT_URL'];
$arr_url = explode("/", $url_source);

$state_name = $arr_url[3];
$city_name  = $arr_url[4];
$store_name = $arr_url[4];

$db = & DB();

//Let say grab 3 columns to be check
$db->select('state_name, city_name, store_name');


if(!empty($state_name)):
    $db->where('state_name', $state_name);
endif;

if(!empty($city_name)):
    $db->where('city_name', $city_name);
endif;

if(!empty($store_name)):
    $db->where('store_name', $store_name);
endif;

$query = $db->get('table', 1);
$obj = $query->row();
if ($obj):
    $route["$obj->state_name/$obj->city_name/$obj->store_name"] = "project/get_city_data/$state_name/$city_name/$store_name";
endif;

您可以尝试通过此网址进行测试:

http://localhost/state_name/city_name/store_name

答案 1 :(得分:0)

我用正则表达式解决了它。

在routes.php中,我写了

$url_source = $_SERVER['REQUEST_URI'];
if(!(preg_match('%^/project/get_description\?state=[a-zA-Z_-]*%', $url_source) || preg_match('%^/project/get_currency\?state=[a-zA-Z_-]*%', $url_source))){

        if(!preg_match('%^\/[a-zA-Z_-]+\/[a-zA-Z_-]+\/[a-zA-Z_-]+$%', $url_source)){
                $route['(:any)/(:any)'] = 'project/get_city_data/$1/$2';
        }else{
                $route['(:any)/(:any)/(:any)'] = 'project/get_store_data/$1/$2/$3';
        }
}

这样我就能够为特定的功能进行路由。