yii1.1升级到yii2.0.55后报错的核心矛盾是框架底层重构,必须修正控制器继承(extends yii\base\controller)、替换yii::app()为yii::$app、调整布局赋值位置、设置正确web根目录(/web子目录)、修复表单语法(改用yii\widgets\activeform和yii\helpers\html)、确保runtime/assets可写及composer依赖完整。

Yii1.1升级到Yii2.0.55后部署报错,核心矛盾是框架底层结构、类加载路径、应用实例获取方式、布局机制和表单语法全部重构,直接替换文件必然触发Fatal error或500错误,必须逐层校验迁移动作是否到位。
确认控制器继承与应用实例调用是否修正
打开任意控制器文件(如SiteController.php),检查第一行class定义是否为class SiteController extends yii\base\Controller;若仍写成extends CController,立刻报Class 'CController' not found。
全局搜索Yii::app(),所有出现位置必须替换为Yii::$app。例如Yii::app()->user->isGuest → Yii::$app->user->isGuest;【继续保留Yii::app()会直接抛出Fatal error: Call to undefined method Yii::app()】。
检查控制器内是否有$this->layout = 'main'写在类体顶层(非方法内)。Yii2.0完全忽略此类赋值,必须移入action方法中或设为public属性并在beforeAction里动态赋值。
验证Web入口目录与Nginx伪静态配置
登录宝塔面板 → 网站 → 你的站点 → 根目录:确认已改为/www/wwwroot/your-site/web(不是项目根目录),否则runtime/config等敏感路径可能被直接访问,且require路径错乱导致500错误。
进入该站点 → 伪静态 → 选择「Laravel5」模板(与Yii2重写逻辑一致),或手动粘贴规则:
location / {
try_files $uri $uri/ /index.php?$args;
}
改完立即点「重载配置」,否则Nginx不生效。若仍跳转到index.php?r=xxx,检查config/web.php中urlManager的'showScriptName' => false是否设置。
检查表单代码是否完成命名空间迁移
方法一:全局替换旧表单语法
将所有$this->beginWidget('CActiveForm')删除,顶部添加use yii\widgets\ActiveForm;;
将<?php $form=$this->beginWidget('CActiveForm'); ?> → <?php $form = ActiveForm::begin(); ?>;
将<?php echo $form->textField($model,'name'); ?> → = $form->field($model, 'name')->textInput() ?>。
方法二:快速定位遗漏点
执行grep -r "CActiveForm\|CHtml::" ./views/,对输出的每个文件逐个修复;【忘记use yii\widgets\ActiveForm会导致Class 'ActiveForm' not found】。
注意:Yii2已彻底删除CHtml类,所有CHtml::textField()必须改为yii\helpers\Html::textInput(),且需提前use yii\helpers\Html;。
排查runtime与assets目录权限及Composer依赖
第一步:确认PHP版本≥7.4(Yii2.0.55实际要求PHP 7.2+,但7.4更稳),执行php -v验证;
第二步:检查runtime和assets目录是否可写,执行ls -ld runtime assets,若属主不是www用户,运行chown -R www:www runtime assets;
第三步:进入项目根目录,执行composer install --no-dev(生产环境)或composer update(开发环境),确保fxp/composer-asset-plugin已安装且版本兼容(Composer 2.x对应^1.4.6)。
若提示“Asset plugin not found”,运行composer global require fxp/composer-asset-plugin:^1.4.6;若报GitHub认证失败,按提示输入GitHub token或配置国内镜像源:composer config -g repo.packagist composer https://packagist.proxy.fly.dev。
回滚迁移前先确认数据库状态
第一步:运行php yii migrate/history,查看输出中带Y标记的记录是否真实存在对应migration文件;
第二步:若输出为空或全是N,说明无可用回滚项,yii migrate/down必然静默跳过;
第三步:若某条Y记录对应文件已被删,手动清空yii_migration表中该行,否则后续up会报The migration history is corrupted。
第四步:执行多步回滚必须显式指定数量,例如退3步:php yii migrate/down 3;【生产环境禁止执行yii migrate/down——dropTable可能直接破坏业务数据】。











