yii2 web 执行 migrate

Yii框架 · Fecmall · 于 10天前 发布 · 75 次阅读

有时候,我们做了一个产品,想通过界面安装产品,因此,无法通过console执行 ./yii migrate,这种方式,我们需要通过web调用

有时候,我们做了一个产品,想通过界面安装产品,需要安装数据库sql,Yii2是通过console命令 ./yii migrate这种方式进行sql的安装和升级,如果用界面web安装无法使用,本文是通过界面进行migrate安装sql

因为fecmall有界面安装的需求,实现的代码如下:

public function runMigrate()
    {
        $bashPath = dirname(Yii::getAlias('@appfront'));
        $oldApp = Yii::$app;
        $aliases = Yii::$aliases;
        Yii::$app = new \yii\console\Application([
            'id' => 'install-console',
            'basePath' => $bashPath,
            'components' => [
                'db' => $oldApp->db,
            ],
        ]);
        ob_start();
        ob_implicit_flush(false);
        $runResult = Yii::$app->runAction('migrate/up', ['migrationPath' => '@fecshop/migrations/mysqldb', 'interactive' => false]);
        $post_log = ob_get_clean();
        Yii::info($post_log, 'fecshop_debug');
        Yii::$app = $oldApp;
        /**
          * aliases 需要重新设置,否则,将会导致配置文件中的  aliases 无法获取,譬如main.php中的
          *  'aliases' => [
          *     '@bower' => '@vendor/bower-asset',
          *     '@npm'   => '@vendor/npm-asset',
          *  ],
        */
        Yii::$aliases = $aliases;
        // $runResult 返回值,0 代表执行完成,其他的返回值代表执行出错(这个地方和常规函数相反)
        return $runResult === 0 ? true : false ;
    }

fecmall部分安装代码实例:https://github.com/fecshop/yii2_fecshop/blob/master/app/appinstall/modules/Database/controllers/ConfigController.php#L259

共收到 1 条回复
Fecmall#18天前 0 个赞

注意点:

1.代码$runResult = Yii::$app->runAction('migrate/up', ['migrationPath' => '@fecshop/migrations/mysqldb', 'interactive' => false]); 返回值如果是0(int),那么代表执行成功,否则执行失败,这个有常规的方法相反

2.对于代码:Yii::$app->runAction,因为是console的函数,在执行的过程中就会执行一些输出到STDOUT,但是在web中输出这些内容就显的不合适,因此通过ob函数获取这些输出信息,然后写入到log文件里面

ob_start();
        ob_implicit_flush(false);
        $runResult = Yii::$app->runAction('migrate/up', ['migrationPath' => '@fecshop/migrations/mysqldb', 'interactive' => false]);
        $post_log = ob_get_clean();
		Yii::info($post_log, 'fecshop_debug');
添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
Your Site Analytics