簡體   English   中英

回調表單驗證在HMVC中不起作用

[英]Callback form validation is not working in HMVC

我在使用回叫進行表單驗證時遇到問題。 在創建新的費用類型之前,驗證應檢查tbl_fees_type是否存在,如果已經存在,則將顯示錯誤費用類型已經存在。

我知道所需的表單驗證正在工作,因為它表明它是必需的,但是當涉及到回調驗證時,如果使用回調檢查數據庫中的信息,該驗證將無法正常工作。

這是我的代碼:

所以我有一個這樣的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 -->

所需的表單驗證工作如下所示。 表單驗證需要工作

這是我要實現的示例表單,它具有相同的源代碼,但是在codeigniter(不是HMVC)中運行,但是在我的工作中(HMVC)不起作用。

喚醒回調驗證應如下所示

在文件夾庫中創建類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;
        }

       }

}

使回調在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);
    }

} 

然后在運行部分在run($this)添加$this run($this)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM