Php 分页页面在codeigniter3框架中提供404

Php 分页页面在codeigniter3框架中提供404,php,codeigniter,pagination,Php,Codeigniter,Pagination,我已经在Codeigniter3框架中编写了分页代码,但是当我想转到第二、第三页等页面时,它会显示404页。问题出在哪里?我的路由文件: $route['courses/category/(:any)'] = 'courses/all_courses/$1'; $route['courses/(:any)'] = 'courses/single_course/$1'; 我的控制器: public function all_courses($categories_slug = NULL, $of

我已经在Codeigniter3框架中编写了分页代码,但是当我想转到第二、第三页等页面时,它会显示404页。问题出在哪里?我的路由文件:

$route['courses/category/(:any)'] = 'courses/all_courses/$1';
$route['courses/(:any)'] = 'courses/single_course/$1';
我的控制器:

public function all_courses($categories_slug = NULL, $offset = 0) {

            //pagination
            $config['base_url'] = base_url() . 'courses/category/'.$categories_slug;
            $config['total_rows'] = $this->db->count_all('courses');
            $config['per_page'] = 2;
            $config['uri_segment'] = 4;

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


            $data['title'] = 'Bütün Kurslar Burada';

            $data['courses'] = $this->courses_model->get_all_courses($categories_slug, $config['per_page'], $offset);


            $this->load->view('templates/header');
            $this->load->view('courses/courses', $data);
            $this->load->view('templates/footer');
        }
我的模型:

public function get_all_courses($categories_slug = FALSE, $limit = FALSE, $offset = FALSE) {
        if($limit) {
            $this->db->limit($limit, $offset);
        }
<-- and other codes here -->
}
公共函数获取所有课程($categories\u slug=FALSE,$limit=FALSE,$offset=FALSE){
如果($限额){
$this->db->limit($limit,$offset);
}
}
我的看法是:

<div class="col-md-12 courses_page_btn2">
                <nav>
                    <ul class="pagination">
                        <li><a><?php echo $this->pagination->create_links(); ?> </a></li>
                    </ul>
                </nav>
            </div>


首先,在routes文件中,route from courses/category/(:any)设置为route to courses/all_courses/$1,但控制器的all_courses方法有第二个参数。所以你需要做点什么。我猜,由于您的分页使用的是URI段4,因此您需要如下调整您的路由:

$route['courses/category/(:any)/(:num)'] = 'courses/all_courses/$1/$2';
该路由的问题是,如果没有(:num),那么您将得到404。在大多数分页方案中,您希望它默认为1(第一页)。考虑这条路线:< /P>
$route['courses/category/(.+)'] = function ($x, $y = 1)
{
    return 'courses/all_courses/' . $x . '/' . $y;
};
这将路由到您的all_courses方法,并提供这两个参数,即使您忽略了第二个参数

此分页对我来说适用于该路线:

public function all_courses( $x, $y )
{
    $this->load->helper('url');
    $this->load->library('pagination');

    $pconfig['base_url'] = base_url() . 'courses/category/'.$x;
    $pconfig['total_rows'] = 10;
    $pconfig['per_page'] = 2;
    $pconfig['uri_segment'] = 4;

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

    echo $this->pagination->create_links();
}

昨天我回答了一个CodeIgniter分页问题,我想如果你读了我的答案,它可能也适用于这里。CodeIgniter分页非常容易,如果您让它变得容易:它没有帮助:(根据您的代码和评论,听起来您对PHP和CodeIgniter的理解可能还不够。我建议您返回并阅读《用户指南》中关于分页的整个页面。看看这里,您可能还需要创建一些路由检查此链接可能对您有帮助,但我没有得到任何帮助。我是否应该编写第二个code也是,还是第一个好?还有一个问题。如果这个分页在最后的第三页显示记录,它在顶部的第四页显示相同的元素。我如何解决它?另外,当我单击第三页时,它会转到第四页,这与你的问题真的不相关。你问你为什么得到404。我解决了这个问题吗?如果是这样的话,你应该考虑接受我的回答,然后针对那个特定的需要开始一个新的问题。