Я использовал некоторые коды, как показано ниже,
<select class="form-control selection" name="currency"> <option value="">select currency</option> <option value="AED"<?php echo set_select('currency', 'AED'); ?> >AED</option> <option value="SAR"<?php echo set_select('currency', 'SAR'); ?> >SAR</option> <option value="MAD"<?php echo set_select('currency', 'MAD'); ?> >MAD</option> <option value="TRY"<?php echo set_select('currency', 'TRY'); ?> >TRY</option> </select>
Но, к сожалению, он не отображает выбранное значение после неудачной проверки формы. Почему этот базовый метод set_select () не работает? Я использовал это в некоторых других областях, и все, что работает нормально
Прежде чем использовать set_value()
, set_select()
, set_checkbox()
, set_radio()
, вы должны передать эти поля для проверки, даже если это не требуется / проверено.
Есть только два случая, когда вы используете вспомогательные функции формы CodeIgnIter set_*
:
Form_validation
не загружена. Form_validation
экземпляром (вы используете библиотеку Form_validation
). Чтобы использовать вспомогательные функции set_*
, вам необязательно использовать библиотеку проверки формы, но если вы используете библиотеку проверки, вы ДОЛЖНЫ установить хотя бы правило проверки для этого поля .
Для всех вспомогательных функций формы set_*
справедливо следующее. Но я попытаюсь описать, как работает set_select()
:
Синтаксис: set_select($field = '', $value = '', $default = FALSE)
Когда вы используете set_select()
, CodeIgniter использует _get_validation_object()
для поиска объекта проверки .
_get_validation_object()
возвращает либо object
либо FALSE
(если проверка еще не загружена).
Когда он возвращает FALSE
, set_select()
ищет переменную $_POST
чтобы найти указанное имя field
в массиве, а в следующем , проверяя функциональные параметры, такие как $value
и $default
, определяет, будет ли возвращено selected="selected"
атрибут / значение или пустая строка ''
.
Таким образом, он работает без использования библиотеки проверки формы.
Но если раньше библиотека проверки была загружена, set_select()
передаст аргументы Form_validation::set_select()
и вернет результат.
В классе Form_validation
существует частное свойство, называемое _field_data
которое представляет собой массив, содержащий все имена / значения полей ( те, для которых вы установили для них правила проверки ).
Form_validation::set_select()
проверяет существование field
в массиве _field_data
и возвращает пустую строку при _field_data
.
Массив _field_data
заполняется методом validation set_rules()
.
Следовательно, если вы используете библиотеку валидации, вы должны установить, по крайней мере, правило проверки для своего field
чтобы получить set_select()
helper-функции set_select()
.
Вот почему вы не могли заставить его работать.
Я надеюсь, что этот ответ поможет получить хорошее представление о set_*
.
Попробуй это:
Измените функцию set_select
в set_select
формы из:
if (count($_POST) === 0) { return ' selected="selected"'; }
в
if (count($_POST) === 0) { if ($default) { return ' selected="selected"'; } else { return ''; } }
По их словам, выбор набора кодеригентов работает только в том случае, если вы проверяете эти поля. Если эти поля не требуются, то нет права на повторное заполнение