【问题标题】:Routes controller overriding路由控制器覆盖
【发布时间】:2013-12-13 16:18:13
【问题描述】:

我正在使用 MVC 模式和 CodeIgniter 框架开发一个网站。

我有 2 个控制器:

站点 - 主控制器在视图中导航

class Site extends CI_Controller {
    public function index() {
        $this->view ();
    }
    public function view($page = 'home') {
        if (! file_exists ( "application/views/pages/$page.php" )) {
            show_404 ();
        }
        $data ['page'] = 'pages/' . $page;
        $this->load->view ( 'template/template.php', $data );
    }
}

Members - 管理会员系统的控制器

class Members extends CI_Controller {
    public function __construct() {
        $this->load->model ( "members_model" );
    }
    public function login() {
        $this->members_model->login ();
    }
}

我的路线配置

$route ['default_controller'] = "site";
$route ['(:any)'] = "site/view/$1";

所以现在我有一个小问题,当我调用成员控制器时,它会寻找一个名为 members 的页面,而不是一个名为 members 的控制器。

我能做些什么来解决这个问题?

【问题讨论】:

    标签: php codeigniter controller


    【解决方案1】:

    你必须为Members创建其他路由

    $route ['members'] = "members";
    $route ['members/(:any)'] = "members/$1";
    $route ['default_controller'] = "site";
    $route ['(:any)'] = "site/view/$1";
    

    注意顺序很重要,当检测到匹配的路由时,上面的路由将首先使用members

    【讨论】:

    • 解决了我的问题!非常感谢!
    【解决方案2】:

    您应该为该控制器添加一个特定的路由规则,如下所示:

    $route['members/(:any)'] = 'members/$1';
    

    或者可以为控制器中的每个方法添加一个,例如:

    $route['members/login'] = 'members/login';
    

    请注意,您需要将此/这些规则添加到您的 routes.php 文件中,但在任何其他可以匹配它的规则之前。所以你应该从最具体到最普遍的规则。

    【讨论】:

      猜你喜欢
      • 2016-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-27
      • 2021-09-21
      • 2011-02-01
      • 1970-01-01
      • 2018-01-06
      相关资源
      最近更新 更多