Похоже, что codeIgnitor выдает обратный вызов, если предыдущая проверка не удалась.В этом тестовом примере у меня есть простая форма с одним вводом текста.Для пустого ввода правило проверки должно отлавливать «обязательный» и не вызывать обратный вызов.Однако вызывается обратный вызов.
Вот контроллер:
<?php
class DebugCIValidation extends CI_Controller {
function __construct(){
parent::__construct();
}
function requiredTest(){
$displayData = array();
// validation rules
$this->load->library('form_validation');
$this->form_validation->set_error_delimiters('<div style="color: red;">', '</div>');
$this->form_validation->set_rules('txtInfo', '<b>Test Input</b>', 'trim|required|callback_myLittleVerification');
if ($this->form_validation->run() == FALSE){
if (validation_errors()==''){
echo('No errors found');
$displayData['strTestData'] = '';
}else {
echo('Errors found');
$displayData['strTestData'] = set_value('txtInfo');
}
$this->load->vars($displayData);
$this->load->view('debug/ciValidation');
}else {
echo('Validation run TRUE');
die;
}
}
function myLittleVerification($strValue){
if ($strValue==''){
echo('IN CALLBACK: REQUIRED FAILED - should not be here!'); die;
}
return(true);
}
}
Вот представление:
<?php
echo(form_open('debug/DebugCIValidation/requiredTest'));
echo('Required Text: <input type="text" name="txtInfo" size="40" value="'.$strTestData.'"><br>');
echo('Detected Error: '.form_error('txtInfo').'<br><br>');
echo('<input type="submit" name="cmdSubmit" value="Test">');
echo(form_close());
Когда я отправляю форму без данных вВ поле ввода выполняется обратный вызов:
IN CALLBACK: REQUIRED FAILED - should not be here!
Если я удалю обратный вызов из правила:
$this->form_validation->set_rules('txtInfo', '<b>Test Input</b>', 'trim|required');
Произойдет правильная проверка формы codeIgnitor:
Detected Error:
The Test Input field is required.