使用URI路由通配符

时间:2013-02-19 23:03:54

标签: codeigniter codeigniter-2

在我的名为文章的控制器中,我有以下功能,我用它来显示数据库中的数据:

function get_all(){

  $this->load->library('pagination');
  $config['base_url'] = base_url().'article/get-all';
  $config['total_rows'] = 2; // example
  $config['per_page'] = 1;
  $config['num_links'] = 20;
  $config['full_tag_open'] = '<div class="pagination" align="center">';
  $config['full_tag_close'] = '</div>';

  $this->pagination->initialize($config);

  $this->load->model('mod_articles');
  $data['records']= $this->mod_articles->get_articles_this_year($config['per_page'],$this->uri->segment(3));

  $this->load->view('view_article_list',$data);
}

一般来说,达到该功能的网址是:http://localhost/article/get_all,但要使网址看起来像http://localhost/article/get-all,请在config / route.php中添加以下内容:

 $route['article/get-all'] = "article/get_all";

工作正常,但当我点击分页链接转到下一页时,会显示 404找不到页面

您能告诉我如何正确使用URI路由通配符吗?

修改

我在config / route.php中也有以下内容,以避免索引显示在url

 $route['article/(:any)'] = "article/index/$1";

如果删除上述行,则分页有效。

2 个答案:

答案 0 :(得分:3)

分页类是否会向链接添加任何额外的URI段,例如:

/article/get-all/page/5

如果,那么,你应该设置两条路线:

$route['article/get-all'] = "article/get_all";
$route['article/get-all/(:any)/(:any)'] = "article/get_all/$1/$2";

答案 1 :(得分:0)

我没有看到你包含uri_segment的配置,分页库使用此配置。

$config["uri_segment"] = 3;

$page = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;

将其用作

 $data['records']= $this->mod_articles->get_articles_this_year($config['per_page'],$page);

在查询中直接附加$this->uri->segment(3)会返回NULL,因为如果url段无效,则返回FALSE,而sql limit需要的是整数从哪里开始。