Codeigniter登录适用于常规Codeigniters,但不适用于Hmvc


Codigniter login works on regular Codeigniter but not Hmvc

我有这个登录脚本,它在常规的codeigniter上运行得很好,但当我将其切换到hmvc codeignite器时,我开始得到一个404验证未找到的错误。我有三个控制器,我将在下面列出。此控制器验证登录信息。

class Verify extends MX_Controller {
function __construct()
 {
parent::__construct();
$this->load->model('user','',TRUE);
}
function index()
{
 //This method will have the credentials validation
$this->load->library('form_validation');
$this->form_validation->set_rules('username', 'Username',      'trim|required|xss_clean');
$this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_database');
if($this->form_validation->run() == FALSE)
{
 //Field validation failed.  User redirected to login page
 $this->load->view('login_view');
}
else
{
 //Go to private area
 redirect('home', 'refresh');
}
}
function check_database($password)
{
 //Field validation succeeded.  Validate against database
 $username = $this->input->post('username');
 //query the database
 $result = $this->user->login($username, $password);
 if($result)
 {
 $sess_array = array();
 foreach($result as $row)
 {
   $sess_array = array(
     'id' => $row->id,
     'username' => $row->username
   );
   $this->session->set_userdata('logged_in', $sess_array);
   }
   return TRUE;
   }
   else
   {
   $this->form_validation->set_message('check_database', 'Invalid username or password');
 return false;
   }
   }
   }

这是我的登录控制器

 class Login extends MX_Controller {
 function __construct()
 {
 parent::__construct();
 }
 function index()
 {
 $this->load->helper(array('form'));
 $this->load->view('login_view');
 }   
 }

那么这就是家庭控制器。

 session_start(); //we need to call PHP's session object to access it   through CI
 class Home extends MX_Controller {
 function __construct()
 {
 parent::__construct();
 }
 function index()
 {
  if($this->session->userdata('logged_in'))
 {
 $session_data = $this->session->userdata('logged_in');
 $data['username'] = $session_data['username'];
 $this->load->view('home_view', $data);
 }
 else
 {
 //If no session, redirect to login page
 redirect('login', 'refresh');
 }
 }
 function logout()
 {
  $this->session->unset_userdata('logged_in');
 session_destroy();
 redirect('home', 'refresh');
 }
 }

那这就是我的家。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Simple Login with CodeIgniter - Private Area</title>
 </head>
 <body>
 <h1>Home</h1>
 <h2>Welcome <?php echo $username; ?>!</h2>
 <a href="home/logout">Logout</a>
 </body>
 </html>

这是我的登录视图

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <title>Simple Login with CodeIgniter</title>
</head>
<body>
<h1>Simple Login with CodeIgniter</h1>
<?php echo validation_errors(); ?>
 <?php echo form_open('verify'); ?>
 <label for="username">Username:</label>
 <input type="text" size="20" id="username" name="username"/>
 <br/>
 <label for="password">Password:</label>
 <input type="password" size="20" id="passowrd" name="password"/>
 <br/>
 <input type="submit" value="Login"/>
 </form>
 </body>
  </html>

我不知道为什么从mvc代码点火器到hmvc会有所不同,但有些地方出了问题。非常感谢所有的帮助。

所有方法的首要检查是确保所有控制器和型号Ucfirst示例Verify.php而不是Verify.php

如果你需要在HMVC中使用回调,那么你需要以下的代码

将其放入库

<?php
class MY_Form_validation extends CI_Form_validation {
function run($module = '', $group = '') {
    (is_object($module)) AND $this->CI = &$module;
    return parent::run($group);
}
} 

然后添加$this if($this->form_validation->run($this) == FALSE)

还有xss_clean在代码点火器3中不工作

请注意HMVChttps://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/downloads仅适用于代码点火器3

还要确保你的路线设置正确,例如

$route['verify'] = 'modulename/verify/index';

相关文章: