Codeigniter 回调函数上的错误消息未显示
我有以下代码:Codeigniter 回调函数上的错误消息未显示,codeigniter,hmvc,Codeigniter,Hmvc,我有以下代码: <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Login extends MY_Controller { function __construct() { parent::__construct(); $this->load->model('users/user_model'); $this->load->l
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Login extends MY_Controller
{
function __construct()
{
parent::__construct();
$this->load->model('users/user_model');
$this->load->library('form_validation');
}
function _load_login_page()
{
$this->load->model('sysconfig/sysconfig_model');
$a = $this->sysconfig_model->get_sysconfig();
$row = $a[0];
$this->lang->load('klas',$row->sysconfig_language);
$data['sys_name'] = $row->sysconfig_system_name;
$data['template_name'] = $row->systemplate_name;
$data['css_script'] = base_url().'assets/'.$row->systemplate_name;
if($row->sysconfig_maintenance === 'Y')
{
$this->load->view('sysconfig/maintenance',$data);
}
else {
$this->load->view('login',$data);
}
}
function index()
{
$this->form_validation->set_rules('username', 'Username', 'trim|required|max_length[12]|xss_clean|callback_check_auth');
$this->form_validation->set_rules('password','Password','trim|required');
if($this->form_validation->run($this) == FALSE)
{
$this->_load_login_page();
} else {
redirect('welcome','refresh');
}
}
function check_auth()
{
if($this->user_model->authentication())
{
return TRUE;
}
$this->form_validation->set_message('check_auth',$this->lang->line('invalid_username'));
return FALSE;
}
?>
user_model.php
<?php
class User_Model extends CI_Model
{
function authentication()
{
$this->db->where('useracc_id', $this->input->post('username'));
$this->db->where('useracc_password', md5($this->input->post('password')));
$q = $this->db->get('base_useracc');
if($q->num_rows() == 1)
{
$session_data = array('isUserLogged'=>TRUE);
$this->session->set_userdata($session_data);
return TRUE;
}
}
?>
从这里我们可以看到,如果用户没有填写用户名和密码字段,它将显示错误,一切正常。问题是,如果用户提供的用户名或密码无效,则不会显示错误消息
关于这些信息,我已经把$lang['invalid_username']='invalid username或password';在语言文件上
我正在使用HMVC技术进行此操作。请帮帮我。您似乎没有向回调函数传递任何数据。回调函数期望输入字段的值作为参数传递。我认为您不能将其作为表单验证回调来使用,因为身份验证方法可能需要同时知道密码和用户名。目前,您没有将任何数据传递到check\u auth方法,或者实际上没有传递到用户\u model->authentication方法。这就是form_验证忽略它的原因 与其将check_auth作为回调调用,为什么不先运行form_validation呢?这才是它真正的用途-检查数据是否正确并经过清理,然后将值作为if语句的一部分从窗体传递给check_auth函数。您将无法使用form_validation set_message方法来显示错误,但我认为这是一种更干净的方法
总之,使用表单_验证检查您接收的数据是否正常,如果不正常,则显示相关消息。基于该信息对用户进行身份验证是一个单独的过程,我认为这不属于验证。你看到区别了吗?从HMVC wiki页面: 将表单验证与MX一起使用时,在将当前控制器作为$CI变量分配给表单验证库之前,您需要扩展如下所示的CI_表单_验证类。这将允许回调方法正常工作。CI论坛也讨论了这一点。即:
<?php
/** application/libraries/MY_Form_validation **/
class MY_Form_validation extends CI_Form_validation
{
public $CI;
}
<?php
class Xyz extends MX_Controller
{
function __construct()
{
parent::__construct();
$this->load->library('form_validation');
$this->form_validation->CI =& $this;
}
}
我尝试使用相同的代码实现另一个登录函数,但该函数是非hmvc的,可以工作。