用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3795|回复: 5
收起左侧

[已解决] 多级路由配置

[复制链接]
发表于 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个参数
不知道这个思路对不对。

先感谢大家,第一次发帖。问题比较菜,希望大家不要见笑。。。
发表于 2010-2-5 01:46:34 | 显示全部楼层
user 控制器里当然可以有 blog 方法,blog 方法当然可以接收多个参数。
index.php/user/blog/222/333/444/555/.../nnn

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

还有,就是路由是基于正则的,基本上只要正则能解决的,路由都可以办到。
 楼主| 发表于 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了。。。
发表于 2010-2-5 10:12:15 | 显示全部楼层
$route['user/:any/blog/(:num)/'] = "user/blog/$1/$2";
这里哪有 $1 呢?是不是少了个括号?应该把 :any 也括起来,或者自己写正则比如  \d+ 等等。
 楼主| 发表于 2010-2-5 11:52:18 | 显示全部楼层
已经加上括号了,还是不行,我再想想办法看看。。。,谢谢Hex。。
 楼主| 发表于 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威望 +2 收起 理由
Hex + 2 我很赞同

查看全部评分

本版积分规则