You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 09:24:01