fanxuan 发表于 2010-2-5 00:15:20

多级路由配置

本帖最后由 fanxuan 于 2010-2-5 00:16 编辑

大家好,我刚学ci,对多级路由不知道怎么实现,比如:传统:username=joe&&app=blog&&aid=33或uid=222&&app=blog&&aid=33
现在的:
user/joe/blog/332223或
user/222/blog/332223

我的问题是:
1 我是需要2个控制器:user和blog呢,还是直接一个user控制器处理
2 如果2个控制器,我路由中要怎么配置如果只是1个控制器,能不能实现这种情况:user控制器里面有blog方法,然后222和332223变成两个blog方法的2个参数
不知道这个思路对不对。

先感谢大家,第一次发帖。问题比较菜,希望大家不要见笑。。。

Hex 发表于 2010-2-5 01:46:34

user 控制器里当然可以有 blog 方法,blog 方法当然可以接收多个参数。
index.php/user/blog/222/333/444/555/.../nnn

至于控制器和方法如何调配,那就要具体项目具体分析了,目前没有标准。

还有,就是路由是基于正则的,基本上只要正则能解决的,路由都可以办到。

fanxuan 发表于 2010-2-5 09:00:19

本帖最后由 fanxuan 于 2010-2-5 09:02 编辑

谢谢Hex。我现在的路由是这样配置的:
$route['user/:any/blog/(:num)/'] = "user/blog/$1/$2";
$route['user/(\d+)/blog/(\d+)/'] = "user/blog/$1/$2";

我的控制器是这样写的:

class User extends Controller {
function User()
{
parent::Controller();
$this->load->helper('url');
}

function blog()
{
$user=trim($this->uri->segment(3, 0));
$id = intval($this->uri->segment(4, 0));
echo "user";var_dump($user);
echo "id";var_dump($id);
//$this->load->view('welcome_message');
}
}

但我输入:http://localhost/blog/index.php/user/32/blog/2222
总是404错误
但如果是http://localhost/blog/index.php/user//blog/32/2222
则正常打印2个参数。请问一下是不是我路由没写对。上面2种路由都试过,都不行。
麻烦Hex了。。。

Hex 发表于 2010-2-5 10:12:15

$route['user/:any/blog/(:num)/'] = "user/blog/$1/$2";
这里哪有 $1 呢?是不是少了个括号?应该把 :any 也括起来,或者自己写正则比如\d+ 等等。

fanxuan 发表于 2010-2-5 11:52:18

已经加上括号了,还是不行,我再想想办法看看。。。,谢谢Hex。。

fanxuan 发表于 2010-2-5 13:21:26

这个问题终于解决了,最后的解决方案:
1 routes设置

$route['(user)/(:any)/(blog)/(:any)'] = 'user/blog/$2/$4';

注意:
1)每一个都要加上括号,
2)我之前以为$1为第一个any,$2为第二个any
原来是:$1为user,$2为第一个any,$3为blog,$4为第二个any
这是最重要的2个问题

2 control里面我修改为参数了

class User extends Controller {
function User()
{
parent::Controller();
$this->load->helper('url');
}

function blog($user='', $id = 0)
{
echo "user";var_dump($user);
echo "id";var_dump($id);
//$this->load->view('welcome_message');
}
}


现在输入http://localhost/blog/index.php/user/fanxuan/blog/2222
就会执行http://localhost/blog/index.php/user/blog/fanxuan/2222了


再次感谢Hex
页: [1]
查看完整版本: 多级路由配置