Codeigniter - проверка правильности заказа обратного вызова - PullRequest
0 голосов
/ 05 февраля 2011

Надеюсь, простой.У меня есть следующие правила проверки формы:

    $this->form_validation->set_rules('timeStart', 'Day Start Time', 'trim|required|xss_clean|callback_validtime');
    $this->form_validation->set_rules('timeEnd', 'Day End Time', 'trim|required|xss_clean|callback_validtime|callback_validtimeorder');
    $this->form_validation->set_rules('interval', 'Interval', 'trim|required|xss_clean|is_natural|callback_valid_interval');

У меня проблема в том, что callback_valid_interval требует, чтобы были установлены $this->input->post('timeStart') и $this->input->post('timeEnd').В настоящее время мои функции callback_valid_interval содержат ошибки, если пользователь не завершил timeStart или timeEnd.

Можно ли как-то установить зависимость между правилами, т.е. не запускать callback_valid_interval, если другие правила не прошли?

В качестве альтернативы я могу поставить ручную проверку этих полей, но мне было интересно, есть ли лучший способ сделать это?

С наилучшими пожеланиями, Бен.

Ответы [ 3 ]

1 голос
/ 06 февраля 2011

К сожалению, кроме правила matches[], ничто в классе проверки формы Codeigniter не позволяет вам сделать это ...

Поскольку CI_Form_validation::set_rules ничего не возвращает, вы не можете использовать это в своем предложении if. Я предлагаю вам просто проверить, установлены ли ваши значения.

Они не будут проверяться при запуске вашего обратного вызова третьего правила, поэтому они могут быть чем угодно: выполнить некоторую проверку в callback_valid_interval.

Примерно так:

$this->form_validation->set_rules('timeStart', 'Day Start Time', 'trim|required|xss_clean|callback_validtime');
$this->form_validation->set_rules('timeEnd', 'Day End Time', 'trim|required|xss_clean|callback_validtime|callback_validtimeorder');
if ($this->input->post('timeStart') && $this->input->post('timeEnd')){
    $this->form_validation->set_rules('interval', 'Interval', 'trim|required|xss_clean|is_natural|callback_valid_interval');
}
1 голос
/ 05 февраля 2011

В Codeigniter правила запускаются слева направо, как только один из них заканчивается неудачей, он прекращает проверку и помечает поле как «не прошедшее проверку» и устанавливает сообщение как первое ошибочное правило.

У вас есть все3 поля по мере необходимости, поэтому как минимум у вас должно быть что-то во всех 3 полях.Каждое поле проверяется независимо, поэтому вы не можете (с помощью встроенного класса form_validation) создавать более сложные логические проверки, чем каждое поле, имеющее независимые правила.

0 голосов
/ 07 февраля 2011

Использование метода if (true AND true) делает то, что вы хотите, но я хочу убедиться, что вы знаете, что он делает.set_rules не оценивает правила, только функция запуска.Что делает код jfoucher, так это получает значения post, и если они оба не установлены, то это создаст другое правило.Но это не проверяет трим или любое другое правило (кроме обязательного).Однако этот метод работает.

Единственная альтернатива, о которой я могу подумать, - переписать ваши обратные вызовы или создать собственное правило, расширив класс form_validation.Я сделал расширение для своих приложений, и оно дает мне более универсальный способ проверки, но требует, чтобы вы углубились в ядро ​​CodeIgniter.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...