set_message в codeigniter не работает
Я собираюсь изменить сообщение проверки для конкретного правила под названием принять в codeigniter. это флажок. я пробовал этот код в соответствии с документацией codeigniter:
function register()
{
//validate form input
$this->form_validation->set_rules('sex', $this->lang->line('create_user_validation_sex_label'), 'required|trim|xss_clean');
$this->form_validation->set_rules('first_name', $this->lang->line('create_user_validation_fname_label'), 'required|trim|xss_clean');
$this->form_validation->set_rules('last_name', $this->lang->line('create_user_validation_lname_label'), 'required|trim|xss_clean');
$this->form_validation->set_rules('email', $this->lang->line('create_user_validation_email_label'), 'required|valid_email|trim|is_unique[users.email]');
$this->form_validation->set_rules('phone', $this->lang->line('create_user_validation_phone_label'), 'required|trim|xss_clean');
$this->form_validation->set_rules('mob', $this->lang->line('create_user_validation_mob_label'), 'required|trim|xss_clean');
$this->form_validation->set_rules('address', $this->lang->line('create_user_validation_address_label'), 'required|trim|xss_clean');
$this->form_validation->set_rules('company', $this->lang->line('create_user_validation_company_label'), 'required|trim|xss_clean');
$this->form_validation->set_rules('agentcode', $this->lang->line('create_user_validation_agentcode_label'), 'required|trim|xss_clean', 'callback_ins');
function callback_ins ($ins)
{
if ($ins == 0) {
return false;
}
else {
return true;
}
}
$this->form_validation->set_rules('username', $this->lang->line('create_user_validation_username_label'), 'required|trim|xss_clean|is_unique[users.username]');
$this->form_validation->set_rules('password', $this->lang->line('create_user_validation_password_label'), 'required|min_length[' . $this->config->item('min_password_length', 'ion_auth') . ']|max_length[' . $this->config->item('max_password_length', 'ion_auth') . ']|matches[password_confirm]');
$this->form_validation->set_rules('password_confirm', $this->lang->line('create_user_validation_password_confirm_label'), 'required');
$this->form_validation->set_rules('accept', 'Accept', 'callback_accept_check');
function accept_check($str)
{
if ($str == '') {
$this->form_validation->set_message('accept_check', 'برای ایجاد یک حساب کاربری، باید قوانین سایت را مطالعه کرده و موافقت خود را با آن اعلام نمایید.');
return FALSE;
} else {
return TRUE;
}
}
if ($this->form_validation->run() == TRUE)
{
$username = strtolower($this->input->post('username'));
$email = strtolower($this->input->post('email'));
$password = $this->input->post('password');
$additional_data = array(
'sex' => $this->input->post('sex'),
'first_name' => $this->input->post('first_name'),
'last_name' => $this->input->post('last_name'),
'phone' => $this->input->post('phone'),
'mob' => $this->input->post('mob'),
'address' => $this->input->post('address'),
'company' => $this->input->post('company'),
'agentcode' => $this->input->post('agentcode')
);
}
if ($this->form_validation->run() == true && $this->ion_auth->register($username, $password, $email, $additional_data))
{
//check to see if we are creating the user
//redirect them back to the admin page
$this->session->set_flashdata('message', $this->ion_auth->messages());
redirect("main/users", 'refresh');
}
else
{
//display the create user form
//set the flash data error message if there is one
$this->data['message'] = (validation_errors() ? validation_errors() : ($this->ion_auth->errors() ? $this->ion_auth->errors() : $this->session->flashdata('message')));
$this->_render_page('registration', $this->data);
}
}
но это не работает, и это показывает сообщение по умолчанию для требуемой проверки! даже я не могу установить сообщение вручную с помощью функции обратного вызова только для этого правила в чем проблема?
1 ответ
Согласно руководству пользователя CI, вы должны передать rule
в качестве первого параметра set_message()
метод, а не имя ввода:
$this->form_validation->set_message('rule', 'Error Message');
В вашем случае это должно быть:
$this->form_validation->set_message('required', 'برای ایجاد یک حساب کاربری، باید قوانین سایت را مطالعه کرده و موافقت خود را با آن اعلام نمایید.');
но я просто хочу установить сообщение для поля ввода.
Затем вам нужно использовать функцию обратного вызова в качестве правила проверки, как показано ниже:
$this->form_validation->set_rules('accept', 'Accept', 'callback_accept_check');
Затем в контроллере добавьте метод с именем accept_check
, Например:
public function accept_check($str)
{
if ($str == '') {
$this->form_validation->set_message('accept_check', 'برای ایجاد یک حساب کاربری، باید قوانین سایت را مطالعه کرده و موافقت خود را با آن اعلام نمایید.');
return FALSE;
} else {
return TRUE;
}
}