yii2组件之下拉框带搜索功能的示例代码(yii-select2)
发布时间 - 2026-01-11 03:09:47 点击率:次简单的小功能,但是用起来还是蛮爽的。分享出来让更多的人有更快的开发效率,开开心心快乐编程。

如果你还没有使用过composer,你可就out了,看我的教程分享,composer简直就是必备神奇有木有。都说到这个点上了,我们赶紧使用composer进行安装吧。
不急,先来看看效果图是啥样的,不然都没心情没欲望看下去。
啥玩意,不感兴趣?继续看嘛,看完再操作一边才能觉得好在哪里。
有木有感觉很帅气,当然啦,远远不止,还很上档次用起来效果也是杠杠的有木有。
好了好了,抓紧时间安装,不然聊起来真是没完没了。
composer require kartik-v/yii2-widget-select2 "@dev"
特别说明,因为这里安装的dev版本,也就是开发版本,不稳定版本,如果你的项目是git托管的,composer安装下来之后这里记得删掉 \vendor\kartik-v\yii2-widget-select2目录下的.git文件,不然你提交不上去的哦
等他个大概5分钟的样子差不多了,安装就好了,然后我们就可以像下面一样开始使用了
//如果你的表单是ActiveForm,请使用 use kartik\select2\Select2; //$data是键值对数组哦,key-value ,下面所声明的所有$data均为键值对数组,以该数组为例 $data = [2 => 'widget', 3 => 'dropDownList', 4 => 'yii2']; echo $form->field($model, 'title')->widget(Select2::classname(), [ 'data' => $data, 'options' => ['placeholder' => '请选择 ...'], ]);
//如果你的表单是非ActiveForm,可以参考下面的 use kartik\select2\Select2; echo Select2::widget([ 'name' => 'title', 'data' => $data, 'options' => ['placeholder' => '请选择...'] ]);
非ActiveFomr生成的更新数据的时候就需要默认选中,好办,加value值即可
use kartik\select2\Select2; echo Select2::widget([ 'name' => 'title', 'value' => 2, 'data' => $data, 'options' => ['placeholder' => '请选择...'] ]);
但是如果你的表单是ActiveForm生成的,但是往往字段不是表字段怎么办呢?更好办啦,以上面的为例,你只需要指定$model->title = ['title1', 'title2'];即可
基本上就是这么回事,我们也就很简单的实现了下拉选择并可搜索的功能。但是,咋又冒出来了个但是呢,但是刚才是我们想的,事实是这样的,小编妹子说了,你这能不能操作再方便点,一次选择一个太麻烦了,能不能多选呀?为了实现你那ZB的伎俩,好吧,确实也简单,一行代码解决掉。
echo $form->field($model, 'title')->widget(Select2::classname(), [ 'data' => $data, 'options' => ['multiple' => true, 'placeholder' => '请选择 ...'], ]); #多选的添加默认值同上
眼尖的注意到了,加了一个multiple选项。非ActiveForm生成的表单操作一致。
我们看看效果是怎么样的。
到此,我们已经可以唱者NB的歌欢快的回家了
等等,好像忘记什么了,有眼尖的小伙伴可能注意到了,$data都是我们预先准备好的数据,你说这数据量万一很大的情况,不搞死人了嘛,那接下来让我们看看如何实现异步搜索结果。举一个例子,我们现在要查询某一个书名,但是我们的书的数据量大概有100W,很简单,这需要我们根据你的搜索结果异步获取下拉框里面的数据。未完待续,晚点做进一步说明。
来,上家伙,我们来看看如何使用异步搜索功能,工作中尤其是进行关联数据的时候其用途更是大大的,方便性嘛,看看就知道了,好用的不得了。
基本的使用方法就不多说了,请看官们移步上文,我们这里继续接着大侃大论。
我们先来预览下异步搜索的效果图
注意哦,图中标记的部分是我们通过输入的关键词搜索出来的,异步这效果呢,我截图上来估计你也看不到效果,动图我还不会,不知道怎么搞的,要说具体是啥效果吗,相信大多数人也是明白滴,这就叫做只可意会,言谈不出来。好了,我们干脆直接上代码看具体操作吧。
// view层
use kartik\select2\Select2;
use yii\web\JsExpression;
<?php
echo $form->field($model, 'title')->widget(Select2::classname(), [
'options' => ['placeholder' => '请输入标题名称 ...'],
'pluginOptions' => [
'placeholder' => 'search ...',
'allowClear' => true,
'language' => [
'errorLoading' => new JsExpression("function () { return 'Waiting...'; }"),
],
'ajax' => [
'url' => '这里是提供数据源的接口',
'dataType' => 'json',
'data' => new JsExpression('function(params) { return {q:params.term}; }')
],
'escapeMarkup' => new JsExpression('function (markup) { return markup; }'),
'templateResult' => new JsExpression('function(res) { return res.text; }'),
'templateSelection' => new JsExpression('function (res) { return res.text; }'),
],
]);
?>
上面的代码可直接复制使用,唯独需要修改的就是ajax里对应的url地址。下面我们看看controller层代码是怎么提供数据的。
//controller层
public function actionSearchTitle ($q)
{
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
$out = ['results' => ['id' => '', 'text' => '']];
if (!$q) {
return $out;
}
$data = Article::find()
->select('id, title as text')
->andFilterWhere(['like', 'title', $q])
->limit(50)
->asArray()
->all();
$out['results'] = array_values($data);
return $out;
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# yii2
# 下拉框搜索功能
# yii
# 下拉框
# yii2高级应用之自定义组件实现全局使用图片上传功能的方法
# Yii框架自定义数据库操作组件示例
# Yii核心组件AssetManager原理分析
# Yii框架组件和事件行为管理详解
# yii2多图上传组件的使用教程
# Yii扩展组件编写方法实例分析
# yii2行为的方法如何注入到组件类中详解
# PHP的Yii框架中移除组件所绑定的行为的方法
# Yii2中组件的注册与创建方法
# Yii框架学习笔记之应用组件操作示例
# 关键词
# 请选择
# 好了
# 表单
# 说了
# 很简单
# 为例
# 搜索结果
# 先来
# 键值
# 多选
# 都是
# 如果你
# 来了
# 还没有
# 我还
# 只可意会
# 尤其是
# 让我们
# 也就
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在服务器上三步完成建站并提升流量?
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
如何快速选择适合个人网站的云服务器配置?
Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
Java类加载基本过程详细介绍
JavaScript如何实现音频处理_Web Audio API如何工作?
Laravel如何编写单元测试和功能测试?(PHPUnit示例)
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
大连 网站制作,大连天途有线官网?
Laravel如何配置Horizon来管理队列?(安装和使用)
LinuxCD持续部署教程_自动发布与回滚机制
高性能网站服务器部署指南:稳定运行与安全配置优化方案
高性能网站服务器配置指南:安全稳定与高效建站核心方案
在线制作视频网站免费,都有哪些好的动漫网站?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
Laravel如何实现API资源集合?(Resource Collection教程)
Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程
Laravel中的Facade(门面)到底是什么原理
宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
实现点击下箭头变上箭头来回切换的两种方法【推荐】
Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】
Laravel怎么清理缓存_Laravel optimize clear命令详解
EditPlus中的正则表达式 实战(4)
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
独立制作一个网站多少钱,建立网站需要花多少钱?
如何在宝塔面板中创建新站点?
如何在Windows 2008云服务器安全搭建网站?
Laravel如何使用.env文件管理环境变量?(最佳实践)
如何破解联通资金短缺导致的基站建设难题?
浅谈Javascript中的Label语句
个人网站制作流程图片大全,个人网站如何注销?
Laravel distinct去重查询_Laravel Eloquent去重方法
如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
常州企业网站制作公司,全国继续教育网怎么登录?
Laravel如何实现文件上传和存储?(本地与S3配置)
大同网页,大同瑞慈医院官网?
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
详解Android——蓝牙技术 带你实现终端间数据传输
移动端脚本框架Hammer.js
大连网站制作公司哪家好一点,大连买房网站哪个好?
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
香港服务器部署网站为何提示未备案?
如何在自有机房高效搭建专业网站?
nginx修改上传文件大小限制的方法
Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】
下一篇:手表浏览器哪个好用
下一篇:手表浏览器哪个好用

