我已经检查了类似的所有问题,并且没有一个问题使用CI 2.1.3和Wiredesignz的HMVC来解决我的问题。
我在form_validation.php配置文件中有以下规则:
array(
'field' => 'eta-renpal-1',
'label' => 'Renpal number (1)',
'rules' => 'required|callback_check_eta_group'
),
在我的ETA控制器中,我有这个功能(当前设置为在测试时始终无效):
public function check_eta_group($reference)
{
// Internal function for use by form validation system to check if the ETA group requirements are met.
$this->form_validation->set_message('check_eta_group', 'Other values in the group ' . $reference . ' are also required.');
return false;
}
由于某种原因,“required”函数有效,但回调没有。我已经尝试了所有其他类似的建议解决方案,但无法让它们工作。请帮帮忙?
编辑:回调似乎根本没有被调用。我甚至在回调中做了var_dump(),看看屏幕上是否有输出 - 没有......
编辑2::自己查看最后评论 - 使用该解决方案可以解决问题,但这并不是我想要的。所以 - 如果你有更好的解决方案,请分享: - )
答案 0 :(得分:2)
请参阅我在问题
下的最后评论(使用这里解释的解决方法,stackoverflow.com / items / 3029717 / ...,它的工作原理。这不是我希望它与回调一起工作的方式,但只要它有效,它可能就好了。非常感谢。)
感谢Frosty的评论。
答案 1 :(得分:0)
确保您的函数检查位于您实际运行自定义检查的同一控制器内(即应该能够使用self :: check_eta_group调用)
我在MY_Controller中使用我的检查进行验证时遇到了麻烦。 但当我将它们移动到扩展控制器时,它工作得很好。
这里有两个检查以及我如何调用它们(都在同一个控制器中)
// custom form validators for datepicker and timepicker
public function date_valid($date){
$month = (int) substr($date, 0, 2);
$day = (int) substr($date, 3, 2);
$year = (int) substr($date, 6, 4);
$this->form_validation->set_message('date_valid', 'The %s field is not a valid date');
return checkdate($month, $day, $year);
}
public function time_valid($time){
$this->form_validation->set_message('time_valid', 'The %s field is not a valid time');
if (preg_match("/^(1[0-2]|0?[1-9]):[0-5][0-9] (AM|PM)$/i", $time)) {
return TRUE;
} else {
return FALSE;
}
}
public function create_custom(){
// load models and libraries
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
// set form validation rules
$this->form_validation->set_rules('schedule_date', 'Schedule Date', 'required|callback_date_valid');
$this->form_validation->set_rules('schedule_time', 'Schedule Time', 'required|callback_time_valid');
...
if ($this->form_validation->run() == FALSE) { // failed validation
error_log("validation_errors: ".validation_errors());
}