Проверка формы обратного вызова не работает в HMVC

У меня проблема с использованием моего обратного вызова для проверки формы. Валидация должна проверить tbl_fees_type, если существует существующее fee_type_name, прежде чем создавать новый тип комиссии, если она уже существует, будет отображаться ошибка. Тип комиссии уже существует.

Я знаю, что проверка требуемой формы работает, потому что она показывает, что она необходима, но когда дело доходит до проверки обратного вызова, которая проверяет информацию из базы данных, если она существует с использованием обратного вызова, она не работает.

Это мой код:

Итак, у меня есть контроллер Feestype, как это

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

      class Feestype extends MX_Controller {

        public function __construct() {
          parent::__construct();

          // loading the fees type model
          $this->load->model('model_feestype');

          // loading the form validation library
          $this->load->library('form_validation');

      }

      public function index() {

            $this->load->view('feestype');

      }

      public function create()
      {
        $validator = array('success' => false, 'messages' => array());

        $validate_data = array(
          array(
            'field' => 'fees_type_name',
            'label' => 'Fees Type Name',
            'rules' => 'trim|required|callback_validate_feestypename' 
                                      //this is the callback
          ),
          array(
            'field' => 'fees_type_role',
            'label' => 'Fees Type Role',
            'rules' => 'trim|required|'
          )
        );

        $this->form_validation->set_rules($validate_data);
        $this->form_validation->set_error_delimiters('<p class="text-danger">','</p>');

        if($this->form_validation->run() === true) {  
          $create = $this->model_feestype->create();         
          if($create === true) {
            $validator['success'] = true;
            $validator['messages'] = "Successfully added";
          }
          else {
            $validator['success'] = false;
            $validator['messages'] = "Error while inserting the information into the database";
          }     
        }   
        else {
          $validator['success'] = false;
          foreach ($_POST as $key => $value) {
            $validator['messages'][$key] = form_error($key);
          }     
        } // /else

        echo json_encode($validator);
      }

      // call back validation function to do
      public function validate_feestypename()
      {
        $validate = $this->model_feestype->validate_feestypename();

        if($validate === true) {
          $this->form_validation->set_message('validate_feestypename', 'The {field} already exists');
          return false;           
        }
        else {
          return true;
        }

       }

    }

    ?>

и это модель model_feestype.php

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

                class Model_Feestype extends CI_Model {


                    public function __construct() {

                        parent:: __construct();

                    }

                public function create()
                {
                    $insert_data = array(
                        'fees_type_name' => $this->input->post('fees_type_name'),
                        'fees_type_role' => $this->input->post('fees_type_role')
                    );
                    $status = $this->db->insert('tbl_fees_type', $insert_data);     
                    return ($status === true ? true : false);
                }



                public function validate_feestypename()
                {
                    $feestypeName = $this->input->post('fees_type_name');
                    $sql = "SELECT * FROM tbl_fees_type WHERE fees_type_name = ?";
                    $query = $this->db->query($sql, array($feestypeName));

                    return ($query->num_rows() == 1 ? true : false);        
                }

            }
            ?>

и это мой модальный вид php файла.

<div class="modal fade" tabindex="-1" role="dialog" id="addFeetype">
                  <div class="modal-dialog" role="document">
                    <div class="modal-content">
                      <div class="modal-header">
                        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                        <h4 class="modal-title">Add Fees Type</h4>
                      </div>

                      <form method="post" action="feestype/create" id="createFeetypeForm">
                          <div class="modal-body">



                              <div class="form-group">
                                <label for="fees_type_name">Fees Type Name</label>
                                <input type="text" class="form-control" id="fees_type_name" name="fees_type_name" placeholder="Fees Type Name">
                              </div>

                              <div class="form-group">
                              <label for="fees_type_name">Fees Type Role</label>
                                <select class="form-control" name="fees_type_role" id="fees_type_role">
                                  <option></option>
                                  <option>School Fees</option>
                                  <option>Personal Fees</option>
                                </select>
                              </div>


                          </div>

                          <div class="modal-footer">
                            <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                            <button type="submit" class="btn btn-primary">Save changes</button>
                          </div>

                      </form>

                    </div><!-- /.modal-content -->
                  </div><!-- /.modal-dialog -->
                </div><!-- /.modal -->

Требуется проверка формы, которая выглядит следующим образом. Форма проверки требуется рабочая

это образец формы, который я хочу получить, он имеет тот же исходный код, но работает в коде кода (не HMVC), но он не работает в моей работе (HMVC).

Проверка правильности обратного вызова должна выглядеть следующим образом

2 ответа

Решение

Все, что вам нужно сделать, чтобы обратные вызовы работали в HMVC, это

MY_Form_validation.php

<?php

class MY_Form_validation extends CI_Form_validation {

    function run($module = '', $group = '') {
        (is_object($module)) AND $this->CI = &$module;
        return parent::run($group);
    }

} 

Затем в части выполнения добавить $this в run($this)

$this->form_validation->run($this)

В папке библиотеки создайте класс MY_Form_validation

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class MY_Form_validation extends CI_Form_validation{

function run($module = '', $group = ''){
(is_object($module)) AND $this->CI = &$module;
return parent::run($group);
}

// call back validation function to do
      public function validate_feestypename()
      {
       $this->CI =& get_instance();
       $this->CI->load->model('model_feestype');
        $validate = $this->CI->model_feestype->validate_feestypename();

        if($validate === true) {
               $this->CI->form_validation->set_message->set_message('validate_feestypename', 'The {field} already exists');
          return false;           
        }
        else {
          return true;
        }

       }

}
Другие вопросы по тегам