如何将Yii1.1的PHP模型作为数据源接入jQuery autocomplete组件?
问题解决方案
1. 新增控制器处理自动完成请求
你目前直接请求Tag.php模型文件是错误的,Yii 1.1的模型本身不处理HTTP请求,需要先在控制器中新增接口动作,比如在TagController.php中添加如下代码:
public function actionAutocomplete() { $term = Yii::app()->request->getParam('term'); $criteria = new CDbCriteria(); // 模糊匹配标签,适配PostgreSQL大小写规则 $criteria->addSearchCondition('LOWER(tag)', strtolower($term), true); $criteria->limit = 10; // 可自定义返回结果上限 $tags = Tag::model()->findAll($criteria); $result = []; foreach ($tags as $tag) { $result[] = [ 'label' => $tag->tag, // 下拉列表显示的文本 'value' => $tag->tag // 选中后回填到输入框的值 ]; } echo CJSON::encode($result); Yii::app()->end(); }
同时需要在控制器的accessRules方法中放开该动作的访问权限,避免出现403无权限错误。
2. 修改前端请求地址
把jQuery Autocomplete配置中的请求地址从Tag.php改为你刚才新增的控制器动作路由,示例如下:
source: function(request, response) { $.getJSON("index.php?r=tag/autocomplete", { term: extractLast(request.term)}, response); },
如果你开启了Yii的URL美化功能,需要把路由替换为你配置的对应美化路径。
3. 调试验证
可以先直接在浏览器访问你的站点地址/index.php?r=tag/autocomplete&term=测试关键词,确认后端接口能正常返回JSON格式的标签数组,再测试前端自动完成功能即可。
内容的提问来源于stack exchange,提问作者Malgosh
相关产品推荐
相关产品推荐

