简体   繁体   English

回调表单验证在HMVC中不起作用

[英]Callback form validation is not working in HMVC

I have a problem in using my call back for form validation. 我在使用回叫进行表单验证时遇到问题。 The validation should check the tbl_fees_type if there is an existing fees_type_name before creating a new fee type, if it exist already it will show an error The Fees Type already exists. 在创建新的费用类型之前,验证应检查tbl_fees_type是否存在,如果已经存在,则将显示错误费用类型已经存在。

I know the required form validation is working because it shows it is required but when it comes to callback validation that checks the information from the database if it exists using callback its not working. 我知道所需的表单验证正在工作,因为它表明它是必需的,但是当涉及到回调验证时,如果使用回调检查数据库中的信息,该验证将无法正常工作。

This is my code: 这是我的代码:

So I have a Feestype controller like this 所以我有一个这样的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;
        }

       }

    }

    ?>

and this is the model_feestype.php Model 这是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);        
                }

            }
            ?>

and this is my modal form view php file. 这是我的模态形式的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 -->

The form required validation is working that looks like this. 所需的表单验证工作如下所示。 Form validation required working 表单验证需要工作

this is the sample form that I want to achieve, it has the same source code but it runs in codeigniter (not HMVC) but it's not working in my work (HMVC). 这是我要实现的示例表单,它具有相同的源代码,但是在codeigniter(不是HMVC)中运行,但是在我的工作中(HMVC)不起作用。

Woking callback validation should look like this 唤醒回调验证应如下所示

In the folder libraries create class MY_Form_validation 在文件夹库中创建类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;
        }

       }

}

All you need to do to make callbacks work in HMVC is 使回调在HMVC中工作所需要做的就是

MY_Form_validation.php 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);
    }

} 

Then in the run part add $this in run($this) 然后在运行部分在run($this)添加$this run($this)

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM