Функция обратного вызова проверки формы Codeigniter не работает - PullRequest
1 голос
/ 01 сентября 2009

Я написал простую функцию обратного вызова, которая не работает. Мои другие обратные вызовы (которые находятся в том же файле библиотеки) работают нормально, поэтому я думаю, что проблема связана с моим кодом.

Параметр, передаваемый в функцию обратного вызова, принимает форму фрагмента PHP, который eval () ed для формирования части оператора if () в самой функции.

Вот что в контроллере:

$this->form_validation->set_rules('rating', 'Rating','required');
$condition = $this->input->post('rating')  . " != 'Excellent'";
$this->form_validation->set_rules('details', 'Details', 'required_conditional[' . htmlentities($condition) .']');

А вот и сама функция обратного вызова:

function required_conditional($str, $condition)
{
    if (eval(html_entity_decode($condition))) {
        if ($str == '') {
            $this->set_message('required_conditional', 'The %s field is required');
            return FALSE;
        }
        else {
            return TRUE;
        }
    }
}

Есть идеи, почему это ни у кого не работает?

Спасибо, Мэтт

Ответы [ 3 ]

2 голосов
/ 04 сентября 2009

разве вы не должны использовать "callback_<function name>"?

2 голосов
/ 08 сентября 2009

Да правильный синтаксис для вызова проверки формы обратного вызова, чтобы использовать "обратный вызов _"

2 голосов
/ 02 сентября 2009

Это потому, что eval оценивает выражения, а не выражения. Это даст вам ошибку разбора:

$test = "1 > 0";
if (eval($test)) { echo "echo!"; }

И это будет работать так, как вы ожидаете:

$test = "return 1 > 0;";
if (eval($test)) { echo "echo!"; }
...