Yii Select2实时手动输入查询

这篇博客介绍了在Yii框架中使用Select2组件进行实时手动输入查询用户的方法,包括两种实现策略。在View.php和Controller.php中进行了关键代码配置。

之前在工作中遇到了问题,我要实时手动输入筛选查询用户,有两种实现方式


方式一:

<?= $form->field($model, 'companies_company_id')->widget(Select2::classname(), [
    'data' => ArrayHelper::map(Companies::find()->all(),'company_id','company_name'),
    'language' => 'en',
    'options' => ['placeholder' => 'Select a state ...'],//直接在这个地方加入数组
    'pluginOptions' => [
        'allowClear' => true
    ],
]); ?>
这种方式只适合小范围的数组筛选,如果这个数据超大,查询时会出现卡顿的现象,用户体验非常差,建议用ajax实时查询结果。就是下面介绍的重点:

方式二:

View.php

<?= $form->field($model, 'borrowid')->widget(kartik\select2\Select2::className(), [
    'options' => ['placeholder' => '请输入用户真实姓名 ...'],
    'pluginOptions' => [
        'allowClear' => true,
        'minimumInputLength' => 1,//重要
        'language' => [
            'errorLoading' => new JsExpression("function () { return 'Waiting...'; }"),
        ],
        'ajax' => [
            'url' => '/borsroswer/search',
            'dataType' => 'json',
            'data' => new JsExpression('function(params) { return {q:params.term}; }'),
            'cache' => true
        ],
        'width' => '400px',
        'escapeMarkup' => new JsExpression('function (markup) { return markup; }'),
        'templateResult' => new JsExpression('function(res) { return res.text; }'),
        'templateSelection' => new JsExpression('function (res) { return res.text; }'),
    ],
]);
?>

Controller.php

public function actionSearch(){
    $q = Yii::$app->request->get('q');
    Yii::$app->response->format = Response::FORMAT_JSON;//响应数据格式为json
    $out = ['results' => ['id' => '', 'text' => '']];
    if (!$q) {
        return $out;
    }

    $data = User::find()
        ->select('user.userId, user.realname,user.cardId,ab.status')
        ->leftJoin('account_bank ab','ab.userId=user.userId')
        ->andFilterWhere(['like', 'user.realname', $q])
        ->limit(50)
        ->asArray()
        ->all();
    $out['results'] = array_map([$this, 'format'],$data);

    return $out;
}

private function format($data){
    $result = [];
    $result['id'] = $data['userId'];
    $result['text'] = '['.$data['userId'].']['.$data['realname'].']['.$data['cardId'].']';
    return $result;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值