macOS安装Yii2高级模板并实现前后端分离的关键三步是:环境准备(PHP 7.4–8.2+必要扩展)、模板初始化(composer创建+./init)、分离配置(admin表迁移+identityClass及cookie路径隔离),缺一不可。

macOS 上安装 Yii2 高级模板并实现前后端分离,关键在三步:环境准备 → 模板初始化 → 分离配置。顺序不能乱,否则前端注册成功、后台却登不进去,或登录后刷新就退出——都是常见踩坑点。
一、确认 PHP 环境与必要扩展
Yii2 高级模板要求 PHP 7.4–8.2(不支持 8.5+ 的新特性,暂避 PHP 8.5.5)。打开终端执行:
- php -v:确认版本在范围内
- php -m | grep -E "openssl|mbstring|pdo|pdo_mysql|curl|json|xml":检查扩展是否全部启用
若缺失,编辑 /usr/local/etc/php/8.1/php.ini(路径依你安装的 PHP 版本而定),取消对应 extension=xxx 行前的分号,保存后重启终端或运行 brew services restart php@8.1。
二、用 Composer 安装高级模板(含国内加速)
先确保 Composer 已安装且配置国内镜像:
- 运行
composer config -g repo.packagist composer https://packagist.proxy.fly.dev - 升级到最新版:
composer self-update
然后创建项目:
composer create-project --prefer-dist yiisoft/yii2-app-advanced yii2-advanced cd yii2-advanced ./init # 选 Development mode,回车确认
注意:不要跳过 ./init,它会生成 common/config/main-local.php 等关键本地配置文件。
三、数据库建库 + 配置 + 迁移
在 MySQL 中手动建库(推荐命令行):
mysql -u root -p -e "CREATE DATABASE yii2advanced CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
编辑 common/config/main-local.php,只改 'db' 部分:
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=yii2advanced',
'username' => 'root',
'password' => '', // 开发阶段可为空
'charset' => 'utf8mb4',
],保存后,在项目根目录执行:
./yii migrate
输入 yes 创建 user 和 migration 表。成功即表示基础数据结构就位。
四、前后端分离配置(用户表+会话隔离)
默认共用 user 表,会导致前台登录后后台自动登录、退出时两边一起掉线。需拆开:
- 新建后台管理员表:
./yii migrate/create admin - 编辑刚生成的迁移文件(在
common/console/migrations/下),把$this->createTable('{{%user}}', ...)改为{{%admin}},字段结构照搬_init.php - 执行
./yii migrate,生成admin表 - 复制
common/models/User.php到common/models/Admin.php,修改tableName()返回'{{%admin}}' - 修改
backend/config/main.php中'user' => ['identityClass' => 'common\models\Admin'] - 修改
frontend/config/main.php中'user' => ['identityClass' => 'common\models\User'] - 为避免 Cookie 冲突,给后台加专属路径:
'cookieParams' => ['path' => '/admin'](在backend/config/main.php的user和request组件中均设置)
至此,前后端使用独立用户表、独立会话路径,互不影响。
五、启动服务(无需配置虚拟主机)
开发阶段直接用 PHP 内置服务器即可:
- 前台:
cd frontend/web && php -S localhost:8080 ../config/router.php - 后台:
cd backend/web && php -S localhost:8081 ../config/router.php
浏览器分别访问 http://localhost:8080(注册用户)和 http://localhost:8081(用同名账号登录 admin 表),验证分离效果。


















