我有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])]);
?>
有意粘贴所有代码,尽管我认为大多数代码都是无关紧要的。
我以多种动态创建的形式加载了该代码,因此包含了所有奇怪的ID和选择器。但是,表单具有不同的下拉菜单,该下拉菜单控制是否显示(和显示)某些字段。上面的特定字段仅在表单的所有其他变体不具有的情况之一中显示。因此该模型具有以下验证:
[['court_house_id', 'staff'], 'required', 'on' => self::SCENARIO_ONE],
顺便说一下,staff
只是一个普通的文本字段,一切都可以正常工作。
为了更改方案,在 视图 中,以下行的格式为:
<?php $model->scenario = \app\models\MyModel::SCENARIO_ONE; ?>
问题是,当我将表单提交为空时,staff
字段会被标记为红色,但无效,而法院会被标记为绿色(虽然为空)。
如果我进入模型并移除'on' => self::SCENARIO_ONE
部分,那么一切都会按预期进行-在空白状态下提交,法院区域也以红色亮起,但这对于我的其他情况是一个问题字段是不需要的。
有什么想法可能会导致该问题以及如何解决该问题?
答案 0 :(得分:1)
例如,在调用save()方法之前尝试在控制器中设置场景
$model = new MyModel(['scenario' => MyModel::SCENARIO_ONE])