Подтвердите Select2 в Yii2 через AJAX - PullRequest
0 голосов
/ 31 января 2019

У меня есть приложение 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, тогда все будет работать как положено - при пустом поле отправить поле судатакже загорается красным, но это будет проблемой для остальных моих сценариев, когда это поле не нужно.

Есть идеи, что может вызвать проблему и как ее решить?

1 Ответ

0 голосов
/ 31 января 2019

Попробуйте установить сценарий в контроллере перед вызовом метода save (), например

$model = new MyModel(['scenario' => MyModel::SCENARIO_ONE])
...