【问题标题】:Yii2: Why kartik\select2 widget not filled then I trying update model?Yii2:为什么 kartik\select2 小部件没有填充然后我尝试更新模型?
【发布时间】:2019-08-07 22:46:21
【问题描述】:

我有 ActiveRecord 模型和该模型的更新形式的视图。我在模型类中也有 getter 和 setter,看起来像这样

public function setTopvisorGoogleRegion($value)
{
    $this->myvalue = $value;
    return(true);
}

public function getTopvisorGoogleRegion()
{
    return([1 => '123']); //I return this array for show you essence of the problem
}

此代码中的以下逻辑 $model->topvisorgoogleregion 必须返回 [1 => '123']

鉴于我有下一个代码

<?php echo($form->field($model, topvisorgoogleregion)->textInput());?>
<?php echo $form->field($model, 'topvisorgoogleregion')->widget(Select2::classname(), [
    'data' =>  [1 => '123', 2 => '456'],
    'options' => [
        'id'=>'projectCtrl',
        'placeholder' => 'Select option',
        'multiple' => true
    ],
    'pluginOptions' => [
        'allowClear' => true,
        'tags' => true, 
    ],

]);
?>

当我打开表单时,我希望看到选项 1 => 已在 Select2 中选择了“123”。这在逻辑上是因为当已经存在的记录正在更新时,ActiveRecord 获取已经存储在模型中的数据(在这种情况下使用 getter)并用这些数据填充视图中的字段(在使用 textInput 的第一个字段中,我看到文本“数组”,因为模型中的 getter返回数组)。但是当我打开更新页面时 Select2 是空的。怎么了?

如果我删除第一个字段 (textInput) 没有任何变化

【问题讨论】:

  • 不确定你在做什么你正在将一个 assoc 数组传递给field 函数的attribute 名称参数?
  • 尝试从 getter 返回一个标量值(即return 1; 而不是return [1 =&gt; '123'];
  • 不,我不尝试将它传递给属性名称参数。我希望在 select2 中加载页面时显示默认选择的“123”元素。 P.S:你是对的,我发现错字了,当我把它复制到 stackoverflow 时,我在第二个代码片段的第一个字符串中丢失了引号,但是我看到的引号是一样的
  • xtx,我尝试返回标量值,不影响

标签: php activerecord yii2 widget


【解决方案1】:

我找到了解决方案 - 在 getter 中我需要提供 ActiveQuery 对象,而不是数组。我不知道它为什么以及如何工作,但它确实有效

【讨论】:

    猜你喜欢
    • 2016-07-14
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多