EDUSOHO踩坑笔记之五十:EduSoho 8.0 升级指南

  • Post author:
  • Post category:其他


EDUSOHO踩坑笔记之五十:EduSoho 8.0 升级指南



系统初始化命令改动

 

  1. app/console topxia:init # 7.0 系列

  2. app/console system:init # 8.0 系列



Migration

在7.0版本包括之前的版本中,数据库migration脚本文件的创建和执行是用

doctrine generate



doctrine migrate

这两个命令。在8.0中数据库脚本文件创建和执行命令是使用

bin/phpmig

目录下的去执行。



Example

 

  1. bin/phpmig generate [name] # name可更改, 命名规范,name需要表明意图 如:`create_course` 表明要创建course表等

  2. bin/phpmig migrate # 同 app/console doctrine:migrations:migrate

  3. bin/phpmig # 可查看所有支持的命令

新写的数据库脚本要支持执行和回滚,这意味着数据库脚本不能像7.0之前一样只用写

up

方法,也要写

down

方法。这样就可以使用

bin/phpmig redo [version]

通过版本号去回滚执行。

具体例子如下

 

  1. bin/phpmig generate test #新建创建test表的migration脚本

test migration 脚本的具体实现

 

  1. <?php

  2. use Phpmig\Migration\Migration;

  3. class Test extends Migration

  4. {


  5. /**

  6. * Do the migration

  7. */

  8. public function up() # 新建test表

  9. {


  10. $biz = $this->getContainer();

  11. $connection = $biz['db']; # 数据库连接在biz容器的['db']里

  12. $connection->exec("

  13. CREATE TABLE `test` (

  14. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',

  15. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='test';

  16. ");

  17. }

  18. /**

  19. * Undo the migration # 脚本回滚

  20. */

  21. public function down()

  22. {


  23. $biz = $this->getContainer();

  24. $connection = $biz['db'];

  25. $connection->exec("DROP TABLE IF EXISTS `test`;");

  26. }

  27. }

这样当数据库已经有

test

表的时候,Migrate 命令执行会报错可以通过手动执行

down

方法里的 SQL 脚本来消除错误。



注意事项

  • 当执行bin/phpmig migrate 命令时出现 “[Doctrine\DBAL\DBALException] Unknow column type “enum” requested. ” 时, 需要手动进入edusoho数据库执行以下命令:
 

  1. ALTER TABLE `ip_blacklist` MODIFY `type` enum('failed','banned') NOT NULL DEFAULT 'failed' COMMENT '禁用类型'

由于之前该字段的注释 加了 DC2TYPE 导致 string 被改成 enum,所以去掉该注释即可。

  • 新部署的开发环境直接在 develop 执行 bin/phpmig migrate 可跳过该注意事项。由于新的 migration 是在7.2.5版本上支持的,所以在7.2.5之前的开发环境需要将分支切换到v7.2.5这个tag上 然后执行老版本到7.2.5版本之间的migration,然后再切换到新分支执行 bin/phpmig migrate命令去执行从7.2.5到develop之间的migration。

  • 当前开发环境在7.2.5之前才执行以下命令, 7.2.5以上就跳过。

 

  1. cd <edusoho-dir>

  2. git checkout v7.2.5

  3. app/console doctrine:migrations:migrate # 执行老版本到7.2.5之间的migration

  4. git checkout develop

  5. # 执行migrate可能会报enum type的错误, 请先手动去掉ip_blacklist表里type字段的注释然后再执行此命令

  6. bin/phpmig migrate #执行7.2.5到develop之间的migration;

如果当前在7.2.5之后,直接切换到develop,执行bin/phpmig migrate命令,如果命令执行途中某个version有报错信息,暂时先把该version的up方法注释掉然后重新执行migrate命令,以确保migration能正确执行。



Vendor

EduSoho 8.0 版本更新了 Symfony 的版本到 2.8 去掉了一些无用的包如 ORM 等。7.0 的 vendor 目录是在

vendor2

目录下,由于

php composer

默认使用

vendor

目录,这导致我们增加新的依赖包十分的不方便,所以8.0中将原先的

vendor2

目录清除了,改为了

vendor



插件



目录结构变化

原目录结构:

 

  1. plugins/

  2. Helloworld

  3. HelloworldBundle

  4. Controller

  5. DependencyInjection

  6. Configuration.php

  7. HelloworldExtension.php

  8. Resources

  9. config

  10. public

  11. views

  12. HelloworldBundle.php

  13. Scripts

  14. BaseInstallScript.php

  15. InstallScript.php

  16. Service

  17. helloworld

  18. Dao

  19. Impl

  20. HelloworldDaoImpl.php

  21. HelloworldDao.php

  22. Impl

  23. HelloworldServiceImpl.php

  24. HelloworldService.php

  25. plugin.json

现目录结构:

 

  1. plugins/

  2. HelloworldPlugin/

  3. Biz/

  4. Dao/

  5. Service/

  6. Controller/

  7. Migrations/

  8. Resources/

  9. config

  10. static-dist

  11. static-src

  12. views

  13. Scripts/

  14. BaseInstallScript.php

  15. InstallScript.php

  16. HelloworldPlugin.php

  17. plugin.json
  • 修改插件名,须带后缀Plugin;


  • HelloworldBundle下

    的目录和文件移到与

    HelloworldBundle

    的平级目录,删除

    HelloworldBundle

    目录;
  • 修改

    HelloworldBundle.php

    名字为

    HelloworldPlugin.php

    ,需要继承

    Codeages\PluginBundle\System\PluginBase

  • 新建

    Biz

    目录及其相应子目录,把

    service

    下的文件移到

    Biz

    相应目录下;


  • public

    的目录移到

    static-src

    目录下,删除

    public

    目录,且把

    js

    目录下的

    controller

    下的目录文件移到

    js

    目录下,删除

    controller

    目录;
  • 修改所有PHP文件的 namespace。



插件相关命令

在一段时期内,还是会兼容老的插件机制。老的插件机制命令已经更名成:

 

  1. old-plugin:create

  2. old-plugin:refresh

  3. old-plugin:register

  4. old-plugin:remove

新的插件命令,请参考新插件的使用文档:

插件的命令行工具



EDUSOHO踩坑笔记之五十一:配置文件的变更

已安装的插件,原会写入

app/data/plugin_installed.php

文件,新插件会写入到

app/config/plugin.php

定制开发 Custom 目录下 twig/controller/routing.yml 等覆盖

原来的配置项

template_overwrite_map

已经失效。需要修改

CustomWebBundle.php

如下:

 

  1. <?php

  2. namespace Custom\WebBundle;

  3. use Symfony\Component\HttpKernel\Bundle\Bundle;

  4. class CustomWebBundle extends Bundle

  5. {


  6. public function getParent()

  7. {


  8. return 'TopxiaWebBundle';

  9. }

  10. }

Symfony 框架会按上面指定的

bundle

覆盖

Resources/

目录下的相同文件,功能和之前的

template_overwrite_map

一样。 注意

Resources/

目录下所有的重名文件都会覆盖。此外,相同名字controller,也会直接覆盖。所以:



版权声明:本文为jyl_sh原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。