yii controller/create 是 yii2 命令行下唯一可用的控制器生成命令,用于生成空控制器骨架,不依赖 gii,需手动补 action、视图及路由配置。

yii gii/controller 命令在 Linux 下根本不能直接用
因为 gii 是 Yii2 的 Web 界面工具,官方没提供命令行版的 gii/controller。你敲 ./yii gii/controller 肯定报错:Unknown command "gii/controller" —— 这不是权限或路径问题,是功能压根不存在。
真正能用的命令行代码生成器是 yii controller/create(注意不是 gii),它属于 Yii2 内置的 console 命令,不依赖 Gii 扩展,也不需要 Web 服务运行。
- 必须确保
console/config/main.php中已启用'controller' => 'yiiconsolecontrollersControllerController'(默认已配好) - 项目根目录下执行,不是在
console/子目录里 - 控制器名用驼峰(如
UserProfile),别写成user-profile或user_profile,否则生成的类名和文件名会出错
用 yii controller/create 创建控制器的正确姿势
这个命令只生成空控制器骨架,不带 action、不建视图、不配路由 —— 和 Gii 的“一键全包”完全不同,得自己补。
执行示例:./yii controller/create user-profile
- 命令末尾的
user-profile会被转成UserProfileController类名,文件存到controllers/UserProfileController.php - 如果加
--namespace=app\controllers\v2,会生成命名空间并创建对应子目录(需手动建controllers/v2/) - 不支持批量生成多个控制器;想建
PostController和CommentController,得分别跑两次命令 - 生成后记得检查
controllers/目录权限:Linux 下有时因 umask 导致新文件不可读,Web 服务会 500
为什么不用 Gii 命令行?它真没实现
有人翻过 Yii2 源码就知道:yiigii 扩展只注册了 Web 路由(/gii/*),所有逻辑都基于 yiiwebController,而 console 应用用的是 yiiconsoleController,两者基类不兼容。
强行把 Gii 模块挂到 console 配置里也没用 —— 它依赖 Request、Response、View 等 Web 组件,console 环境里一调就抛异常。
- 社区有第三方脚本(如
yii2-gii-console),但维护停滞、不兼容 2.0.40+、无测试覆盖,线上项目别碰 - 如果你真需要 Gii 的模板能力(比如自动生成 CRUD 视图),只能老实用浏览器打开
http://your-site/gii - 别试图改
vendor/yiisoft/yii2-gii源码来“命令行化”,升级时会被覆盖,且 Gii 的表单交互逻辑不适合 CLI 场景
Linux 下执行失败的三个高频原因
不是命令写错,而是环境卡点。常见报错和解法:
-
Permission denied: ./yii→ 给执行权限:chmod +x yii(别漏掉+) -
PHP Fatal error: Class 'Yii' not found→ 当前目录不是 Yii2 项目根目录,或者vendor/autoload.php被误删 -
Exception 'yiiaseInvalidConfigException' with message 'Controller not found'→console/config/main.php里'controllerMap'被手动删了或写错了 key,确认存在'controller' => 'yiiconsolecontrollersControllerController'
复杂点在于:命令行生成的控制器默认不注册 URL 规则,user-profile/index 这种路由要自己在 config/web.php 里配 urlManager 规则,不然浏览器打不开 —— 这一步 Gii 会自动提示,而 console 命令完全不管。











