【问题标题】:CodeIgniter Paging 404CodeIgniter 分页 404
【发布时间】:2023-03-16 07:50:01
【问题描述】:

我已经检查了这里关于 CodeIgniter 中的分页的几个线程,但我还没有找到解决我的问题的方法。

我有一个位于 controllers/admin/index.php 的控制器类,名为“Index”,其中包含以下代码:

class Index extends CI_Controller {

    public function __construct() {

        parent::__construct();

        $this->load->helper("url");
        $this->load->helper( 'events_helper' );
        $this->load->helper( 'delegates_helper' );

        $this->load->model( 'admin/event_model' );
        $this->load->model( 'admin/delegate_model' );

        $this->load->library( 'pagination' );

    }

    public function index() {

        $config = array();
        $config['base_url'] = base_url() . 'admin';
        $config['total_rows'] = $this->event_model->record_count();
        $config['per_page'] = 2;
        $config['uri_segment'] = 2;

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

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

        $data['paged_events'] = $this->event_model->get_paged_events( $config['per_page'], $page );
        $data['links'] = $this->pagination->create_links();

        $data['events'] = $this->event_model->get_events();
        $data['event_courses'] = $this->event_model->get_event_courses();
        $data['event_suppliers'] = $this->event_model->get_event_suppliers();
        $data['event_venues'] = $this->event_model->get_event_venues();
        $data['event_locations'] = $this->event_model->get_event_locations();
        $data['event_statuses'] = $this->event_model->get_event_statuses();
        $data['event_prices'] = $this->event_model->get_event_prices();
        $data['event_types'] = $this->event_model->get_event_types();
        $data['event_tutors'] = $this->event_model->get_event_tutors();
        $data['event_delegates'] = $this->event_model->get_event_delegates();
        $data['event_delegate_statuses'] = $this->event_model->get_event_delegate_statuses();

        $this->load->view( 'templates/admin/header', $data );
        $this->load->view( 'admin/index', $data );
        $this->load->view( 'templates/admin/footer' );

    }

}

现在,如果我转到 localhost/cream/public_html/admin 会显示正确数量的结果并呈现指向下一页的链接,但是当我单击下一步或转到第 2 或第 3 页时,我会收到 404 错误。

现在我尝试将我的基本网址更改为:

$config['base_url'] = base_url() . 'admin/index';

和:

$config['base_url'] = base_url() . 'admin/index/';

和:

$config['base_url'] = base_url() . 'admin/';

虽然也将我的 uri_segment 分别更改为 1、2 和 3,但我得到了相同的结果。

我什至尝试过使用:

$route['admin/(:num)'] = 'admin/$1';

和:

$route['admin/(:num)'] = 'admin';

我仍然收到 404 错误。

这些是我的“Event_Model”类中的模型函数:

    public function record_count() {

        $this->db->select_sum( 'event_active' );
        $this->db->from( 'events' );
        $this->db->where( 'event_active', 1 );
        $query = $this->db->get();
        $total_active_events = $query->row()->event_active;

        if( $total_active_events > 0 ) {

            return $total_active_events;

        }

        return false;

    }

    public function get_paged_events( $limit, $start ) {

        $this->db->limit( $limit, $start );
        $this->db->where( 'events.event_active = 1' );
        $this->db->order_by( 'events.event_start_date', 'asc' );
        $query = $this->db->get( 'events' );

        if( $query->num_rows() > 0 ) {

            foreach ( $query->result() as $row ) {

                $data[] = $row;

            }

            return $data;

        }

        return false;

    }

我有点卡在这个问题上,希望能得到您的帮助。谢谢。

编辑:添加 routes.php

$route['default_controller'] = "index";
$route['404_override'] = '';
$route['admin/(:num)'] = 'admin/index/$1';

【问题讨论】:

标签: codeigniter pagination codeigniter-2 codeigniter-url codeigniter-routing


【解决方案1】:

$route['admin/(:num)'] = 'admin/index/$1'; 需要驻留在config/routes.php 中——您不能将路由添加到控制器方法。

【讨论】:

  • 嗨,我忘了提到 $route 在 config/routes.php 文件中,而不是在控制器中。
  • 是的,正如我所说,它在 routes.php 文件中,但它也在控制器中,正如您在我上面的编辑中看到的那样,我已将其从控制器中删除并添加了我的路由.php 代码,但 404 仍然存在。谢谢。
  • 几件事:给定一个localhost/CI-install-dir/admin/index/ uri_segment 设置的url 我认为应该是$config['uri_segment'] = 3;,并且您在routes.php 中的默认控制器应该是$route['default_controller'] = "admin/index/";
  • 默认控制器是'index',因为它是处理应用程序/网站前端的应用程序主要部分的控制器。框架的实际安装目录是localhost/cream,而前端和后端通过localhost/cream/public_html访问,这是出于安全考虑,所以框架实际上是在public_html文件夹之外。
  • 我必须补充一点,这个应用程序是在我的 Mac 上使用 MAMP 本地开发的。
【解决方案2】:

好的,我已经弄清楚发生了什么。

访问除第一页以外的分页结果时,我位于 URI 'localhost/cream/public_html/admin/$1',其中 $1 代表页码。

在我的 'Admin' 控制器代码中,在 index() 函数下,需要将 '$config['uri_segment']' 属性值设置为 2。仅此一项并不能解决问题,但它是正确的 URI 段。

接下来,我需要将以下 2 条路由添加到 'routes.php':

$route['admin'] = 'admin/admin';
$route['admin/:num'] = 'admin/admin';

第一个路由是因为我现在将控制器类名称更改为“Admin”并将其文件名更改为“admin.php”,所以我需要一个在用户位于以下 URI 时可以工作的路由:

localhost/cream/public_html/admin/

第二条路线是将页码重新路由到正确的控制器,现在是“admin/admin”。

就是这样。我的分页现在可以工作了。

我现在需要做的就是让它更改“$limit”变量,以便可以通过下拉菜单动态更改它。我应该能够将下拉列表的值传递给 $_POST 并将其拉入我的 'get_paged_events();'在我的模型中起作用。我会告诉你我的进展情况。

为所有帮助的人干杯。

【讨论】:

    【解决方案3】:

    要避免 index 出现在您的分页中,只需按照以下步骤操作

    Step1:自定义/config/routes.php

       $route['controller/(:num)'] = "controller/index/$1";
       It convert your url www.yourdomian.com/controller/(number) to www.yourdomain.com/controller/index/(number)
    

    第 2 步:使用 $config['uri_segment'] = 2 自定义分页代码,如下所示

            $config['base_url'] = base_url().'controller/';
            $config['display_pages'] = TRUE;
            $config['first_link'] = 'First';
            $config['total_rows'] = (your total rows);
            $config['uri_segment'] = 2;
            $this->pagination->initialize($config);
            echo $this->pagination->create_links();
    

    干杯..

    【讨论】:

      【解决方案4】:

      您的网络服务器上有 url 重写吗?如果没有,请尝试 localhost/path/to/codeigniter/index.php/admin。如果您想跳过 index.php,请阅读 mod_rewrite(如果您使用的是 apache)并查看 codeigniter 的用户指南以了解可能对生成站点内 url 有用的 site_url 函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-19
        • 2013-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多