CodeIgniter从URL中删除函数
我有一个使用CI表单验证的登录表单 表单位于domain.com/login 它运行一个名为validate_credentials的函数,如果验证失败,它将重新加载视图。问题是URL继续显示: domain.com/login/validate\u凭证 如何删除/validate_凭据CodeIgniter从URL中删除函数,codeigniter,url,Codeigniter,Url,我有一个使用CI表单验证的登录表单 表单位于domain.com/login 它运行一个名为validate_credentials的函数,如果验证失败,它将重新加载视图。问题是URL继续显示: domain.com/login/validate\u凭证 如何删除/validate_凭据 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Login extends CI_Con
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Login extends CI_Controller {
public function index()
{
$this->load->library('form_validation');
$this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email');
$this->form_validation->set_rules('password', 'Password', 'required');
$this->form_validation->set_error_delimiters('<div class="alert alert-error">', '</div><br />');
if ($this->form_validation->run() == FALSE)
{
$this->load->view('login/login');
}
else
{
$this->load->view('clock/clock');
}
}
function validate_credentials() {
$this->load->model('membership_model');
$query = $this->membership_model->validate();
if($query) {// staff credentials validated...
$data = array(
'email' => $this->input->post('email'),
'staff_logged_in' => TRUE
);
$this->session->set_userdata($data);
redirect('clock/clock');
}
else { // not validated reload index function
$this->index();
}
}
}
不要调用其他控制器函数,而是重定向到索引。因为CodeIgniter中控制器中的函数正在设置URL方案,所以您现在执行该方案的方法只是执行index函数,但在validate_credentials函数(和URL)中执行
这样做:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Login extends CI_Controller {
public function index()
{
$this->load->library('form_validation');
$this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email');
$this->form_validation->set_rules('password', 'Password', 'required');
$this->form_validation->set_error_delimiters('<div class="alert alert-error">', '</div><br />');
if ($this->form_validation->run() == FALSE)
{
$this->load->view('login/login');
}
else
{
$this->load->view('clock/clock');
}
}
function validate_credentials() {
$this->load->model('membership_model');
$query = $this->membership_model->validate();
if($query) {// staff credentials validated...
$data = array(
'email' => $this->input->post('email'),
'staff_logged_in' => TRUE
);
$this->session->set_userdata($data);
redirect('clock/clock');
}
else { // not validated reload index function
//$this->index();
$this->load->helper('url'); //to enable redirect function
redirect('index'); //based on your index url
}
}
}
在索引视图中,如果它存在,则显示它:
<?if($this->session->flashdata('error_message')):?>
<div class="nNote nFailure"><p><?=$this->session->flashdata('error_message');?></p></div>
<?endif;?>
请注意,flash_消息只显示一次。这意味着您的索引将显示您的错误,然后销毁会话消息。这就是flash_message的目的,它可以正确而简单地显示错误消息。谢谢Jean,这很有意义,但是我如何将错误消息传回呢?我查看了flashdata,但不确定如何抓住错误。我对CI真的很陌生。
<?if($this->session->flashdata('error_message')):?>
<div class="nNote nFailure"><p><?=$this->session->flashdata('error_message');?></p></div>
<?endif;?>