gii生成代码报403或404主因是配置与约定缺失:404因视图路径错误或urlmanager未启用美化url;403因accesscontrol默认限制create/update/delete需登录;model表名需手动修正tablename();模块化需先注册模块而非仅填id。

生成完直接访问报 403 或 404,不是代码没写对,而是 Gii 生成的代码默认依赖几个关键配置和目录约定,漏掉任意一个都会卡住。
CRUD 访问 404:检查视图路径和 urlManager
404 最大概率是视图文件放错位置,或者 URL 美化没开。Gii 生成的视图(index.php、_form.php 等)必须放在 views/控制器名小写/ 下,比如 UserprofileController 对应 views/userprofile/,不能扔进 views/layouts/ 或留空目录。
urlManager 必须启用美化 URL:
-
enablePrettyUrl设为true -
showScriptName设为false - 别在
rules里加冲突规则,比如把<controller:></controller:>写死成某个固定路径
如果用 http://localhost/index.php?r=userprofile/index 能打开,但 /userprofile/index 404,就是 urlManager 配置或 Web 服务器重写(如 Apache 的 .htaccess、Nginx 的 try_files)没生效。
CRUD 访问 403:AccessControl 行为没配白名单
Gii 生成的控制器自带 behaviors(),里面默认有 AccessControl,但它只放行 ['index', 'view'] 给游客,create/update/delete 默认 require login。本地开发没登录态时,直接访问就会 403。
临时调试可注释掉 AccessControl 配置块;上线前必须明确配置:
- 确认
'user' => ['class' => 'yii\web\User']已注册在config/web.php的components中 - 若用 RBAC,把
'roles' => ['@']改成具体角色名,比如'admin',并确保该角色已分配权限 - 不要删整个
behaviors(),只调AccessControl的rules数组
Model 生成后查不到表或字段为空:tableName() 没手动修正
Gii 不读取 db.php 里的 tablePrefix,也不识别自定义前缀表名(如 tbl_user)。它按 snake_case → PascalCase 规则猜类名,再套默认模板 {{%user_profile}} 当表名。
结果就是:find()->all() 报 Table not found: user_profile,或返回空数据(实际表叫 tbl_user)。
解决方法只有手动改模型类里的 tableName():
public static function tableName()
{
return 'tbl_user';
}
如果全库统一前缀,建议在基类 BaseActiveRecord 里统一处理,避免每个模型都补。
模块化生成时提示 Module not found:Gii 不负责加载模块
想把 CRUD 生成到 modules/user 下,填了 Module ID 是 user 却报 Module not found: user,不是路径错了,是 Yii2 在生成前会调 Yii::$app->getModule('user') 查模块是否存在。
这意味着你得先让模块“能被找到”:
- 手动创建
modules/user/User.php,内容至少包含class User extends \yii\base\Module {},命名空间为app\modules\user - 在
config/web.php的modules配置里加上'user' => ['class' => 'app\modules\user\User'] - 确保自动加载机制能定位到该类(比如用 Composer autoload 或 Yii 的
aliases配置)
Gii 只是代码生成器,不是模块注册器——它不帮你写配置、不帮你建文件夹、不帮你注册服务。
最常被忽略的是 tableName() 和 urlManager 的 Web 服务器层重写支持;这两处一错,连最基础的 index 都打不开,根本轮不到看逻辑对不对。











