我不是CI程序员,只是想学习它。也许这是错误的方法,请指教。
我的控制器(不在子目录中):
class Users extends CI_Controller {
function __construct() {
parent::__construct();
}
public function index($msg = NULL) {
$this->load->helper(array('form'));
$data['msg'] = $msg;
$this->load->view('user/login' , $data);
}
public function process_logout() {
$this->session->sess_destroy();
redirect(base_url());
}
}
登录路线:
$route['user/login'] = 'users/index';
问题是,当我想要退出时,它会显示404,因为我的路线中没有它:
$route['user/process_logout'] = 'users/process_logout';
在我看来,我把<a href="users/process_logout">logout</a>
当我添加它时,它可以工作,并且这是很难为一切添加路由。我做错了什么,请建议。
谢谢
答案 0 :(得分:2)
不知道为什么要尝试在index()函数中实现登录功能。但是,既然你说你正在学习CI我就是在讲述 _remap()的功能。
在那之前。您可以尝试以下路由:
$route['user/:any'] = 'users/$1';
$route['user/login'] = 'users/index';
如果你想在控制器段之后立即获取值,你需要使用_remap()函数,这个函数可以解决你的路由问题,我的意思是你不需要设置路由。让我们使用_remap()函数实现您的代码控制器'users'。
class Users extends CI_Controller {
private $sections = array('login', 'logout');
function __construct() {
parent::__construct();
}
public function _remap($method)
{
$section = $this->uri->segment(2);
if(in_array($section, $this->sections))
call_user_func_array(array($this, '_'.$section), array());
else show_404(); // Showing 404 error
}
private function _login()
{
$msg = $this->uri->segment(3);
$this->load->helper(array('form'));
$data['msg'] = $msg;
$this->load->view('user/login' , $data);
}
public function _logout() {
$this->session->sess_destroy();
redirect(base_url());
}
}