yii restful接口依赖yii\rest\urlrule与yii\rest\activecontroller自动映射,需正确配置urlmanager(enableprettyurl和enablestrictparsing必须为true)、控制器继承activecontroller并声明$modelclass、web服务器重写规则生效,且urlrule中controller参数须与控制器类名严格匹配。

直接说结论:Yii 的 RESTful 接口不是靠“手写一堆 action”堆出来的,而是靠 yii\rest\UrlRule + yii\rest\ActiveController 自动映射 HTTP 动词和资源路径,路由规则配错、控制器没继承对、URL 重写没生效——这三处任一出问题,GET /users 就会 404 或返回 HTML 页面。
urlManager 配置必须启用 enablePrettyUrl 和 enableStrictParsing
很多人只加了 rules 却漏掉基础开关,结果请求被 fallback 到默认路由(比如跳到 site/index),看似“能访问”,实则没走 REST 流程。
-
enablePrettyUrl => true:关闭index.php?r=xxx这种丑 URL,是 REST 路径的前提 -
enableStrictParsing => true:强制所有请求必须匹配 rules 中的某条,否则 404 —— 这能帮你快速发现规则没覆盖到的路径 -
showScriptName => false:隐藏index.php,否则/index.php/users也能访问,但不符合 REST 美学,且容易在前端或网关层出错
错误示例:'enablePrettyUrl' => false 时,curl -X GET http://api/users 会 404;正确配置后,才可能触发 yii\rest\UrlRule 的自动解析。
控制器必须继承 yii\rest\ActiveController 并声明 $modelClass
写个普通 Controller 然后自己写 actionIndex()、actionCreate() 是无效的——那只是传统 Web 控制器,不会响应 POST /users 这类请求。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 必须用
class UserController extends \yii\rest\ActiveController - 必须设置
public $modelClass = 'app\models\User';,且该模型要继承yii\db\ActiveRecord - 不要重写
actions(),除非你明确想禁用某个动作(如屏蔽 DELETE);默认它已内置index(GET /users)、view(GET /users/1)、create(POST /users)等
常见报错:Unknown Method – yii\base\UnknownMethodException: Calling unknown method: app\controllers\UserController::actions(),说明你继承错了基类,或者命名空间拼错。
Web 服务器 rewrite 规则没配好,/users 根本进不了 Yii
即使 PHP 层一切正确,Apache 或 Nginx 没把请求转发给 index.php,/users 就永远 404 或返回 403/404 文件系统错误。
- Apache:确保
frontend/web/.htaccess存在且内容正确,且服务器允许AllowOverride All - Nginx:在
location /块里必须有try_files $uri $uri/ /index.php$is_args$args;,缺$is_args$args会导致带查询参数的请求(如/users?page=2)丢失参数 - 测试方法:直接访问
http://your-domain/index.php/users,如果能返回 JSON 数据,说明 PHP 层 OK,问题一定出在 rewrite 上
UrlRule 的 controller 参数值必须和控制器类名匹配
yii\rest\UrlRule 不是从文件名推导控制器,而是靠字符串映射。写错大小写、漏掉命名空间前缀、多加斜杠,都会导致找不到控制器。
- 控制器文件路径是
controllers/UserController.php,类名为app\controllers\UserController,那么 rule 里必须写'controller' => 'user'(小写,无Controller后缀) - 如果是模块内控制器,比如
api\modules\v1\controllers\UserController,rule 应为'controller' => ['v1/user'],不是'v1/usercontroller'或'v1/User' - 多个控制器可合并写:
'controller' => ['user', 'post', 'comment'],每条自动生成 7~8 个标准路由
最容易被忽略的是:yii\rest\UrlRule 默认不处理 OPTIONS 预检请求,如果你的前端跨域发 PUT/PATCH/DELETE,需要额外加 'extraPatterns' => ['OPTIONS' => 'options'],否则浏览器会卡在预检失败。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










