必须先正确配置common/config/main-local.php中的数据库连接参数(含dsn、username、password、charset),再在项目根目录执行yii migrate命令创建user等基础表,顺序不可颠倒,否则会导致注册登录失败。

安装 Yii2 高级模板后,数据库配置和迁移是启动项目前最关键的两步。配置错一个字段、漏执行一次 migrate,都可能导致前台打不开、后台登录失败、用户注册报错等问题。核心在于:先配对 数据库连接参数,再用 yii migrate 同步结构,二者顺序不能颠倒,且必须对应环境配置文件。
一、确认数据库已创建并记好连接信息
Yii2 不会自动建库,需手动在 MySQL 中新建数据库(如 yii2advanced),字符集推荐 utf8mb4_unicode_ci(比 utf8_general_ci 更安全,支持 emoji 和四字节 UTF-8)。同时确认你的数据库用户名、密码、主机地址(本地开发一般为 localhost 或 127.0.0.1)。
- 推荐使用 phpMyAdmin、DBeaver 或命令行
CREATE DATABASE yii2advanced CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; - 避免使用 root 用户直连生产环境;开发阶段若用 root,请确保密码为空或已知
二、修改正确的配置文件:只动 main-local.php
高级模板的数据库配置统一写在 common/config/main-local.php 中,这是 Yii2 初始化时自动生成的本地覆盖文件,也是唯一应修改的数据库配置位置。不要改 main.php 或 backend/config/main-local.php 里的 db 配置——它们会继承 common 的设置。
打开该文件,找到 'db' => [ ... ] 区块,填入你的实际信息:
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=yii2advanced',
'username' => 'root',
'password' => '',
'charset' => 'utf8mb4',
],
-
charset必须与数据库创建时一致,否则中文存取可能乱码 - 如果数据库在远程服务器,把
localhost换成 IP 或域名,并确认端口(默认 3306)开放 - 若要用多个数据库(如 blogdb),按规范在同个
'components'数组里新增一个键(如'blogdb'),后续模型中通过static::getDb()显式调用
三、在项目根目录执行迁移命令
迁移不是“运行一次就完事”,而是让 Yii2 自动创建初始表(如 user、migration)并记录版本。务必在 项目根目录(即含 init.bat、yii、frontend/ 的文件夹)下执行命令:
- Windows 下运行:
yii.bat migrate - Linux/macOS 下运行:
./yii migrate - 首次执行会提示 “Create new migration?”,输入
yes回车即可 - 成功后看到
Migrated up successfully.和新生成的migration表,说明 user 表等已就位
注意:如果提示 'yii' is not recognized,说明未加执行权限(Linux/macOS)或没在正确路径下;Windows 用户请确认 yii.bat 文件存在且未被杀毒软件误删。
四、验证是否生效:前后台注册登录测试
配置+迁移完成后,别急着写代码,先做最小闭环验证:
- 访问前台:
http://localhost/yii2advanced/frontend/web/→ 点右上角 Signup 注册一个账号 - 用刚注册的账号登录后台:
http://localhost/yii2advanced/backend/web/ - 登录成功,说明数据库可读写、user 表结构正确、密码加密逻辑正常
- 若注册时报错 “SQLSTATE[HY000] [1045] Access denied”,一定是数据库用户名/密码错了;若提示 “Table 'xxx.user' doesn't exist”,说明 migrate 没执行或执行失败
这一步看似简单,却是排除 80% 初始配置问题的最有效方式。











