大家好,这是我的第一个CI项目。
我的模型中有一个简单的表单验证功能。
function verify_login()
{
//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');
var_dump($this->form_validation->run());
die;
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');
}
}
仅当它在控制器中而在模型中时才有效。当我尝试将变量从控制器传递给模型中的函数时,变量会被接收但不会处理。
有人可以开导我吗?谢谢。
答案 0 :(得分:6)
可以在模型中进行表单验证。但是您希望验证返回True或False到您的控制器。不要打电话给观点。所以喜欢
// in your Model lets call it Users
function verify_login()
{
$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) {
return FALSE ;
} else {
return TRUE;
}
}
// Your callback function
// in Controller
function verify(){
if( $this->users->verify_login() == FALSE ){
// $this->errormessage will be available in any view that is called from this controller
$this-errormessage = "There was an error with your Log In. Please try again." ;
$this->showLogin() ; }
else {
// set a session so you can confirm they are logged in on other pages
$this->setLoginSession($this->input->post('username', TRUE)) ;
$this->showUserHome(); }
}
要考虑的另一件事 - 通常人们知道他们的用户名,但却搞砸了他们的密码。因此,如果您单独检查它们,则可以相应地调整错误消息。如果您检查用户名并且没有结果 - 您不需要检查密码,并且在错误消息中您可以告诉他们没有该名称的用户。
答案 1 :(得分:1)
我对你的最大建议是不要在你的模型中做这样的验证。如果您在模型中进行验证,则需要直接针对数据库值而不是表单。
如果能解决您的问题,请告诉我,如果没有请注释,我会编辑我的答案。
更新:请忽略上面的一些内容,因为我是在理论而不是事实:)
我将不得不深入研究CI核心,以便更好地了解这有什么问题。你的代码本身看起来不错。我唯一能看到的是你的回调可能不存在于你的模型中,只存在于你的控制器中。回应下面我不认为这是一个很好的模型使用。
答案 2 :(得分:0)
class Data_model extends CI_Model
{
public function rules()
{
return [
['field' => 'pertanyaan',
'label' => 'pertanyaan',
'rules' => 'required|is_unique[data.pertanyaan]'],
['field' => 'jawaban',
'label' => 'jawaban',
'rules' => 'required']
];
}
}
class Datas extends CI_Controller
{
public function add()
{
$data = $this->data_model;
$validation = $this->form_validation;
$validation->set_rules($data->rules());
if ($validation->run()) {
$data->save();
$this->session->set_flashdata('success', 'Berhasil disimpan');
}
$this->load->view("admin/data/new_form");
}
}