Справочник правил
Проверка ссылки по этому вопросу говорит нам следующее относительно правила valid email
:
Возвращает FALSE, если элемент формы не содержит действительный адрес электронной почты.
Это будет справедливо для пустого поля, а также для поля с неверными значениями.
Обрезка
В примерах, предоставленных CodeIgniter, я замечаю, что электронные письма обычно не только требуются и должны быть действительными, но и урезаны. Это может привести к другому результату.
$this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email');
В процессе проверки учитывается следующее:
// If the field is blank, but NOT required, no further tests are necessary
if ( ! in_array('required', $rules) AND is_null($postdata))
Это может быть случай, когда содержимое вашего поля электронной почты не совсем null , и поэтому вызывает флаги с требованием valid_email
.
Возможные связанные ошибки
За три месяца до даты этого ответа на эту тему обсуждалась битбакет. Обсуждение можно посмотреть на https://bitbucket.org/ellislab/codeigniter-reactor/issue/117/input-fields-are-automatically-required.
Утверждается, что использование синтаксиса массива (см. Ниже) в разметке приводит к аналогичным ошибкам, даже если не установлено правило required
:
<input name="user[email]" />
Дополнительное обсуждение и исправления доступны здесь, http://codeigniter.com/forums/viewthread/159243. Один из предлагаемых исправлений, который, по-видимому, решает проблему, состоит в замене вызова is_null()
на empty()
в вышеупомянутом коде:
Итак, следующее:
if ( ! in_array('required', $rules) AND is_null($postdata))
становится:
if ( ! in_array('required', $rules) AND empty($postdata))