路由控制器覆盖

时间:2013-12-13 16:18:14

标签: php codeigniter controller

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

我有两个控制器:

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

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 );
    }
}

成员 - 用于管理会员制

的控制器
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的控制器。

我该怎么做才能解决这个问题?

2 个答案:

答案 0 :(得分:1)

您必须为Members

创建其他路线
$route ['members'] = "members";
$route ['members/(:any)'] = "members/$1";
$route ['default_controller'] = "site";
$route ['(:any)'] = "site/view/$1";

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

答案 1 :(得分:0)

您应该为该控制器添加特定的路由规则,例如:

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

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

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

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