У меня есть приложение Yii2, которое использует плагин Kartik для инициализации выпадающих списков Select2 в формах.
У меня есть один конкретный Select2, который использует вызов AJAX для получения данных для выпадающих опций.
<?=
$form->field($model, 'court_house_id', ['enableAjaxValidation' => true, 'selectors' => ['input' => '#' . $id . "-court-house"],'template' => FormHelper::GenerateFieldTemplate([6])])
->widget(Select2::classname(), [
'options' => ['id' => $id . "-court-house", 'placeholder' => Yii::t('app', 'Search court house...')],
'hashVarLoadPosition' => \yii\web\View::POS_READY,
'pluginOptions' => [
'dropdownParent' => new JsExpression("$('#$modalWindowId')"),
'allowClear' => true,
'minimumInputLength' => 2,
'language' => [
'errorLoading' => new JsExpression("function () { return '" . Yii::t('app', 'Search...') . "'; }"),
],
'ajax' => [
'url' => app\components\UrlMaker::link('data/court-house-list'),
'dataType' => 'json',
'data' => new JsExpression('function(params) { return {q:params.term}; }')
],
'escapeMarkup' => new JsExpression('function (markup) { return markup; }'),
'templateResult' => new JsExpression('function(courthouse) { return courthouse.text; }'),
'templateSelection' => new JsExpression('function (courthouse) { return courthouse.text;}'),
]])
->label(Yii::t('app', 'Court House'), ['class' => FormHelper::GenerateLabelClassTemplate([3])]);
?>
Преднамеренно вставлять весь код, хотя большая его часть не имеет значения, я бы предположил.
Я загрузил это в несколько динамически создаваемых форм, таким образом, все странные идентификаторы и селекторы.Тем не менее, форма имеет другой раскрывающийся список, который контролирует, отображаются ли некоторые поля (и обязательные) или нет.Это конкретное поле выше показано только в одном из сценариев, в которых его нет во всех других вариантах формы.Таким образом, модель имеет следующую проверку:
[['court_house_id', 'staff'], 'required', 'on' => self::SCENARIO_ONE],
Кстати, staff
- это просто обычное текстовое поле, и все работает для него.
Чтобы изменить сценарий, я имеюследующая строка в представлении с формой:
<?php $model->scenario = \app\models\MyModel::SCENARIO_ONE; ?>
Проблема заключается в том, что когда я отправляю пустую форму, поле staff
помечается вкрасный как недействительный, но здание суда помечено зеленым как действующее, хотя оно пустое.
Если я зайду в модель и уберу часть 'on' => self::SCENARIO_ONE
, тогда все будет работать как положено - при пустом поле отправить поле судатакже загорается красным, но это будет проблемой для остальных моих сценариев, когда это поле не нужно.
Есть идеи, что может вызвать проблему и как ее решить?