【发布时间】:2017-11-01 09:21:33
【问题描述】:
所以,我想用 PHP 学习 MVC 并做了一个简单的项目。
我已经配置了 XAMPP 和一个别名 /gambit 重定向到我的项目目录,不知道它是否重要。
这是我的控制器 users.php:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Users extends CI_Controller
{
function __construct()
{
parent::__construct();
$this->load->library('form_validation');
$this->load->model('user');
$this->load->helper('url');
}
public function account()
{
$data = array();
if($this->session->userdata('isUserLoggedIn'))
{
$data['user'] = $this->user->getRows(array('id'=>$this->session->userdata('userId')));
$this->load->view('account',$data);
}
else
{
redirect('login');
}
}
public function login()
{
$data=array();
if($this->session->userdata('success_msg'))
{
$data['success_msg'] = $this->session->userdata('success_msg');
$this->session->unset_userdata('successs_msg');
}
if($this->session->userdata('error_msg'))
{
$data['error_msg'] = $this->session->userdata('error_msg');
$this->session->unset_userdata('error_msg');
}
if($this->input->post('loginSubmit'))
{
$this->form_validation->set_rules('email','Email','required|valid_email');
$this->form_validation->set_rules('password','Password','required');
if($this->form_validation->run() == true)
{
$con['returnType'] = 'single';
$con['conditions'] = array(
'email' =>$this->input->post('email'),
'password' => md5($this->input->post('password')),
'status' => '1'
);
$checkLogin = $this->user->getRows($con);
if($checkLogin)
{
$this->session->set_userdata('isUserLoggedIn',TRUE);
$this->session->set_userdata('userId',$checkLogin['id']);
redirect('account');
}
else
{
$data['error_msg'] = 'Wrong E-mail or password, please try again.';
}
}
}
$this->load->view('login', $data);
}
public function registration()
{
$data = array();
$userData = array();
if($this->input->post('regisSubmit'))
{
$this->form_validation->set_rules('email','Email','required|valid_email|callback_email_check');
$this->form_validation->set_rules('password','password','required');
$this->form_validation->set_rules('conf_password','confirm password','required|matches[password]');
$userData = array(
'email' =>strip_tags($this->input->post('email')),
'password' => md5($this->input->post('password'))
);
if($this->form_validation->run() == true)
{
$insert = $this->user->insert($userData);
if($insert)
{
$this->session->set_userdata('success_msg','Registration successful! Please, log in');
redirect ('login');
}
else
{
$data['error_msg'] = 'An error occured. Please, try again later.';
}
}
}
$data['user'] = $userData;
$this->load->view('registration',$data);
}
public function logout()
{
$this->session->unset_userdata('isUserLoggedIn');
$this->session->unset_userdata('userId');
$this->session->sess_destroy();
$this->load->view('login',$data);
}
public function email_check($str)
{
$con['returnType'] = 'count';
$con['conditions'] = array('email'=>$str);
$checkEmail = $this->user->getRows($con);
if($checkEmail>0)
{
$this->form_validation->set_message('email_check','The given email already exists.');
return FALSE;
}
else
{
return TRUE;
}
}
}
函数注册()有问题,我希望它在注册成功后重定向到控制器的登录()函数,而不是 Apache 给我错误 404 找不到对象。
我试过'login'、'/login'、'users/login'等等都无济于事
如果我将登录设置为基本控制器,它就像一个魅力。
我在我的 xampp 中启用了 rewrite_mod,这是我的 .htaccess 文件
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^(.*) /index.html [NC,L]
Config.php:
$config['index_page'] = '';
$config['uri_protocol'] = "REQUEST_URI"; //tried AUTO too
$config['base_url'] = 'http://localhost/gambit/';
项目结构:
【问题讨论】:
-
提示:将您的用户模型命名为 User_model.php 与类相同,就好像与控制器具有相同的类可能会不时导致一些错误,
-
还要命名你的控制器文件Users.php,其中第一个字母只有大写codeigniter.com/user_guide/general/styleguide.html#file-naming
标签: php apache codeigniter redirect xampp