Yii2 Select2 使用 ajax 多重:非法偏移类型

Posted

技术标签:

【中文标题】Yii2 Select2 使用 ajax 多重:非法偏移类型【英文标题】:Yii2 Select2 multiple with ajax: Illegal offset type 【发布时间】:2018-12-23 23:03:16 【问题描述】:

我使用 Yii2 和小部件 Select2。我希望onkeyup 从表“产品”中搜索具有多项选择选项的产品,因为我必须将结果保存在第二个表“rel_products”中。我知道它为什么返回错误:"Illegal offset type"

这是型号:

    public $products = array();   =>because i write result in second table

这里是视图:

  $url = \yii\helpers\Url::to(['/product/prodlist']);
            echo $form->field($model, 'products')->widget(Select2::classname(), [
                'initValueText' => 'Search for a city ...', // set the initial display text
                'model' => $model,
                'attribute' => 'products',
                'theme' => 'bootstrap',
                'options' => ['placeholder' => 'Search for a city ...'],
                'pluginOptions' => [
                    'allowClear' => true,
                    'minimumInputLength' => 3,
                    'ajax' => [
                        'url' => $url,
                        'dataType' => 'json',
                        'data' => new JsExpression('function(params)  return q:params.term; ')
                    ],
                    'escapeMarkup' => new JsExpression('function (markup)  return markup; '),
                    'templateResult' => new JsExpression('function(product)  return product.text; '),
                    'templateSelection' => new JsExpression('function (product)  return product.text; '),
                ],
            ]);

这里是控制器:

 public function actionProdlist($q = null, $id = null) 

    \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
    $out = ['results' => ['id' => '', 'text' => '']];
    if (!is_null($q)) 
        $query = new Query;
        $query->select()
            ->from('product')
            ->joinWith('translation')
            ->where(['like', 'title', $q])
            ->limit(20);
        $command = $query->createCommand();
        $data = $command->queryAll();
        $out['results'] = array_values($data);
    
    elseif ($id > 0) 
        $out['results'] = ['id' => $id, 'text' => Product::find($id)->title];
    
    return $out;

【问题讨论】:

【参考方案1】:

模型变化:

 public $products;   =>because i write result in second table

【讨论】:

以上是关于Yii2 Select2 使用 ajax 多重:非法偏移类型的主要内容,如果未能解决你的问题,请参考以下文章

Yii2 Kartik Select2 Ajax 控制器 - 结果未显示

在 Yii2 Kartik Select2 小部件中,如何对选择事件进行 ajax 调用?

select2 ajax加载数据,支持模糊查询(非本地)

select2 和 Pjax 在 yii2 中不能一起工作

Yii2:Select2 不使用 jQuery 向控制器发送值

使用 Select2 在视图 Yii2 中调用函数