Функция обратного вызова для проверки формы в конфигурационном файле

Я пытаюсь сделать проверку электронной почты, в результате чего домен электронной почты будет @abc123.com, Я разделил мои правила проверки формы в другой файл в application/config папка называется form_validation.php, Одно из моих правил состоит из callback_email_check,

Где я должен поставить функцию? В главном контроллере или вместе с form_validation.php файл, где все мои правила проверки формы? Я попытался поставить оба варианта, но там, где я показываю свое сообщение об ошибке, я получаю вывод, говорящий Unable to access an error message corresponding to your field name Email.(email_check),

function email_check($email)
{
if( strpos($email, '@abc123.com') !== FALSE ) return TRUE;

$this->form_validation->set_message('email', 'Please use abc123 email only.');

return FALSE;
}

form_validation.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

/* Form Validation Rules */

$config = array(
'login' => array(
array(
'field' => 'user_id',
'label' => 'User ID',
'rules' => 'trim|required'
),
array(
'field' => 'password',
'label' => 'Password',
'rules' => 'trim|required'
)
),
'sign_up' => array(
array(
'field' => 'user_id',
'label' => 'User ID',
'rules' => 'trim|required'
),
array(
'field' => 'name',
'label' => 'Name',
'rules' => 'trim|required'
),
array(
'field' => 'email',
'label' => 'Email',
'rules' => 'trim|required|valid_email|callback_email_check'
),
array(
'field' => 'department',
'label' => 'Department',
'rules' => 'trim|required'
),
array(
'field' => 'password',
'label' => 'Password',
'rules' => 'trim|required'
),
array(
'field' => 'cfm_password',
'label' => 'Re-type Password',
'rules' => 'trim|required|matches[password]'
)
),
'edit_profile' => array(
array(
'field' => 'new_password',
'label' => 'New Password',
'rules' => 'trim|required'
),
array(
'field' => 'retype_password',
'label' => 'Re-type Password',
'rules' => 'trim|required|matches[new_password]'
)
),
'forgot_password' => array(
array(
'field' => 'user_id',
'label' => 'User ID',
'rules' => 'trim|required'
),
array(
'field' => 'email',
'label' => 'Email',
'rules' => 'trim|required|valid_email|callback_email_check'
)
)
);
?>

1

Решение

В вашей функции email_check значение set_message неверно, оно должно совпадать с именем функции.

Изменить это

$this->form_validation->set_message('email', 'Please use abc123 email only.');

к

$this->form_validation->set_message('email_check', 'Please use abc123 email only.');

Перезвонить http://www.codeigniter.com/userguide2/libraries/form_validation.html#callbacks

1

Другие решения

Я также сталкиваюсь с той же проблемой, и вот как я решил ее …

Вы можете поместить функцию email_check в тот же контроллер. Если вы не получаете сообщение об ошибке в обратном вызове, тогда передайте $ this в вашем run ()

if ($ this-> form_validation-> run ($ this)) {…}

и связывание метода контроллера с группой правил —

$ config = array (
‘controller / method’ => array (…));

см. ссылку для получения дополнительной информации: [связывание метода контроллера с группой правил] [1]

ура !!

0

Просто добавьте эту строку в ваш конфиг:

array(
'field' => 'email',
'label' => 'Email',
'rules' => 'trim|required|valid_email|callback_email_check',
**'errors' => array('email_check' => 'Your Error Message')**
),
0
По вопросам рекламы [email protected]