Php CodeIgniter调用自定义表单验证类中的回调
基本上,我想在Php CodeIgniter调用自定义表单验证类中的回调,php,codeigniter,Php,Codeigniter,基本上,我想在表单验证的扩展类中使用回调验证方法 正常情况下 我使用公共回调方法生成MY\u Form\u validation类 在我的控制器中加载为: public function __construct() { parent::__construct(); $this->load->helper(array('form', 'url')); $this->load->library('form_validation'); } $this
表单验证的扩展类中使用回调验证方法
正常情况下
我使用公共回调方法生成MY\u Form\u validation
类
在我的控制器中加载为:
public function __construct()
{
parent::__construct();
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
}
$this->form_validation->validate();
public function __construct()
{
parent::__construct();
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
$this->load->library('my_custom_form_validation');
}
$this->my_custom_form_validation->validate();
在该控制器中用作:
public function __construct()
{
parent::__construct();
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
}
$this->form_validation->validate();
public function __construct()
{
parent::__construct();
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
$this->load->library('my_custom_form_validation');
}
$this->my_custom_form_validation->validate();
我在自定义表单类中使用它:
$this->CI->form_validation->set_rules('field', 'field', 'check_callback');
注意,它没有被称为callback\uu
,也就是说,我不知道为什么它在自己的类中调用时只在没有callback\u
前缀的情况下工作
NOK案例
我使用公共回调方法创建了MY_Custom_form_validation
类
在我的控制器中加载为:
public function __construct()
{
parent::__construct();
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
}
$this->form_validation->validate();
public function __construct()
{
parent::__construct();
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
$this->load->library('my_custom_form_validation');
}
$this->my_custom_form_validation->validate();
当在设置规则中使用时,设置与OK CASE相同,但这次我得到以下错误:
Unable to access an error message corresponding to your field name field.(check_callback)
为什么会这样?它们只是在文件名和加载方式上有所不同!我错过什么了吗
或者应该只有一个扩展的MY_Form_validation
将包含整个项目的整个验证?除了MY\u Form\u验证
,CI真的阻止了这个自定义类吗
MY\u Form\u validation.php
<?php
class MY_Form_validation extends CI_Form_validation
{
protected $CI;
public function __construct($rules = array())
{
parent::__construct($rules);
$this->CI =& get_instance();
}
public function validate()
{
$this->CI->form_validation->set_rules('value', 'value',
'trim|required|integer|check_value['.$this->CI->input->post('unit').']');
$this->CI->form_validation->set_rules('unit', 'unit', 'trim|required');
}
public function check_value($value, $unit)
{
if($value >= 100)
{
return TRUE;
}
else
{
$this->CI->form_validation->set_message('check_value',
'The %s must be greater than or equal 100.');
return FALSE;
}
}
<?php
class MY_Custom_form_validation extends CI_Form_validation
{
protected $CI;
public function __construct($rules = array())
{
parent::__construct($rules);
$this->CI =& get_instance();
}
public function validate()
{
$this->CI->form_validation->set_rules('value', 'value',
'trim|required|integer|check_value['.$this->CI->input->post('unit').']');
$this->CI->form_validation->set_rules('unit', 'unit', 'trim|required');
}
public function check_value($value, $unit)
{
if($value >= 100)
{
return TRUE;
}
else
{
$this->CI->form_validation->set_message('check_value',
'The %s must be greater than or equal 100.');
return FALSE;
}
}
Form.php
,请注意OK的情况和NOT OK的情况
<?php
class Form extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->helper(array('form', 'url'));
// OK CASE
$this->load->library('form_validation');
// NOK CASE
$this->load->library('my_custom_form_validation');
$this->load->model('prf_model');
}
public function submit()
{
$data['username'] = 'my_username';
$data['title'] = 'Submit a PRF';
$data['last_order_submission'] =
($this->prf_model->get_last_prf_order_submission()+1);
// OK CASE
$this->form_validation->validate();
// NOK CASE
$this->my_custom_form_validation->validate();
if(!$this->form_validation->run())
{
$this->load->view('templates/header', $data);
$this->load->view('pages/form', $data);
$this->load->view('templates/footer', $data);
}
else
{
$this->_save_to_database($_POST);
redirect('form/success');
}
}
我以前也遇到过同样的问题,在CI中,您不能只使用任何自定义验证名称,它应该是我的表单验证。勾选此项,我不确定我是否理解您的意思,您是否希望有2个自定义表单验证?第一个是“我的表单验证”,第二个是“我的自定义表单验证”?不,我不想让我的表单验证
而是让我的自定义表单验证
,因为我计划创建许多我的表单名称表单验证
类。向我们展示我的自定义表单的定义_validation@DFriend,好了,你根本不知道原因。我以前也很难调试它。谢谢你帮助一个兄弟。原因可以追溯到PHP中很少或没有支持类自动加载的时候。当添加到核心类名称中时,“MY_”前缀是一种确保在尝试实例化子类(例如MY_Form_validation.php
)之前可以找到并实例化父(核心)类(例如CI_Form_validation)的文件的方法。如果您不尝试扩展核心库类,则不需要使用MY_u
前缀。如果您在CI中实现自动加载功能,则可以轻松地extend
任何您想要的类-核心或自定义。在我看来,方法2和3是为自己实现一个的最佳方法。然后可以得到一个定义,如Class Custom\u form\u validation扩展了MY\u form\u validation{…
以您期望的方式工作。