Проверка формы обратного вызова не работает в 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">×</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;
}
}
}