Intereting Posts
Почему для функций PHP preg_ * требуются разделители regexp? «Слабость / недостаток» сценария php exec python каталог не создается при запуске сценария оболочки bash в php Утвердить несколько условий в одном тесте или разбить на несколько тестов? Функция просмотра, как здесь, на SO я хочу получить сумму файлов в папке по php Как автоматически перенаправить пользователя в Symfony после таймаута сеанса? Использование пользовательского поиска Google с существующим элементом формы Как продолжить нумерованный список на всех последующих страницах с разбивкой на страницы? Массовое присвоение Laravel с отношением morphMany Предотвращение фиксации сеанса путем обеспечения единственного источника создания сеанса должно быть безопасным случайным генератором использовать «глобальное пространство имен»; mysqli sprintf google maps php query Перенаправление на URL после входа в систему с помощью Socialite в Laravel Каковы наилучшие функции деструкции ввода PHP?

CodeIgniter Form Validation – Получить результат как «массив» Вместо «string»

Я пишу свой класс проверки формы с помощью CodeIgniter. Есть ли способ, чтобы я мог получать сообщения об ошибках в паре значений имени? Например, в форме образца есть четыре поля: user_name , password , password_conf и timezone . Среди них имя пользователя и password проверены после выполнения следующих действий:

 $result = $this->form_validation->run(); 

Если указанная выше функция возвращает false, я хочу получить ошибки в парах значений имени, например:

 Array { 'user_name' => 'user name is required', 'password' => 'passord is required' } 

Я действительно хочу создать JSON, с которым я могу вернуться к вызову AJAX. У меня есть (грязное) решение: я могу вызывать методы проверки один за другим, как показано ниже:

 $this->form_validation->required($user_name); $this->form_validation->required($password); 

Есть ли другой способ, чтобы сразу получить все сообщения об ошибках в паре значений имени?

EDIT : Мне предложили выполнить валидацию с помощью jQuery из одного из ответов:

jQuery поможет в проверке на стороне клиента, но как насчет серверной части, я использую проверку CodeIgniter.

Я разработал его так, чтобы:

  1. Я отправляю все значения с помощью AJAX.
  2. Проверка на стороне сервера (PHP).
  3. Выполните требуемую операцию, если входы действительны; else возвращает ошибку пользователю.

Я нашел один способ самостоятельно, посмотрев код CodeIgniter: я расширил библиотеку CI_Form_validation как: –

 class MY_Form_validation extends CI_Form_validation { public function getErrorsArray() { return $this->_error_array; } } 

Я знаю, это взломать, но я буду служить во времени. Надеюсь, что команда CodeIginter скоро придумает интерфейс для доступа к этому массиву.

Вы можете просто использовать,

$this->form_validation->error_array();

Это из справочной документации класса CodeIgniter.

Видя, как проверка воспламенения кода дает вам сообщения об ошибках при обычном обновлении страницы, не лучше ли использовать что-то вроде плагина проверки jquery, который будет проверять полностью клиентскую сторону перед отправкой формы? Нет необходимости в AJAX.

EDIT: Я не предполагаю, что НЕ ДОЛЖЕН проверять серверную сторону, просто чтобы публикация с AJAX для проверки не нужна и уменьшит удары сервера, если вы сделаете это на стороне клиента. Он будет грамотно деградировать до регулярного обновления страницы с ошибками или успешным сообщением.

Решение, которое мне больше всего нравится, не связано с добавлением функции в любом месте или расширением библиотеки проверки:

 $validator =& _get_validation_object(); $error_messages = $validator->_error_array; 

Ссылка: http://thesimplesynthesis.com/post/how-to-get-form-validation-errors-as-an-array-in-codeigniter/

Вы должны иметь возможность называть это в любой точке вашего кода. Кроме того, стоит отметить, что есть более новая тема, которая также обсуждает это.

Вы можете создать частную функцию в своем контроллере

  private function return_form_validation_error($input) { $output = array(); foreach ($input as $key => $value) { $output[$key] = form_error($key); } return $output; } 

а затем в вашем методе проверки, просто позвоните, вот мой

 public function add_cat_form() { $this->output->unset_template(); $this->load->library('form_validation'); $this->form_validation->set_rules('name', 'Name', 'required'); if ($this->form_validation->run()) { if (IS_AJAX) { $dataForInsert = $this->input->post(); if ($dataForInsert['parentid'] == -1) { unset($dataForInsert['parentid']); } $this->post_model->add_cat($dataForInsert); echo json_encode('success'); } else { #in case of not using AJAX, the AJAX const defined } } else { if (IS_AJAX) { #This will be return form_validation error in an array $output = $this->return_form_validation_error($this->input->post()); echo $output = json_encode($output); } else { #in case of not using AJAX, the AJAX const defined } } } с public function add_cat_form() { $this->output->unset_template(); $this->load->library('form_validation'); $this->form_validation->set_rules('name', 'Name', 'required'); if ($this->form_validation->run()) { if (IS_AJAX) { $dataForInsert = $this->input->post(); if ($dataForInsert['parentid'] == -1) { unset($dataForInsert['parentid']); } $this->post_model->add_cat($dataForInsert); echo json_encode('success'); } else { #in case of not using AJAX, the AJAX const defined } } else { if (IS_AJAX) { #This will be return form_validation error in an array $output = $this->return_form_validation_error($this->input->post()); echo $output = json_encode($output); } else { #in case of not using AJAX, the AJAX const defined } } }