EduSoho 8.0 升级指南
Migration
bin/phpmig generate [name] # name可更改, 命名规范,name需要表明意图 如:`create_course` 表明要创建course表等
bin/phpmig migrate # 同 app/console doctrine:migrations:migrate
bin/phpmig # 可查看所有支持的命令
新写的数据库脚本要支持执行和回滚,这意味着数据库脚本不能像7.0之前一样只用写 up
方法,也要写 down
方法。这样就可以使用 bin/phpmig redo [version]
通过版本号去回滚执行。
具体例子如下
bin/phpmig generate test #新建创建test表的migration脚本
test migration 脚本的具体实现
这样当数据库已经有test
表的时候,Migrate 命令执行会报错可以通过手动执行 down
方法里的 SQL 脚本来消除错误。
- 当执行bin/phpmig migrate 命令时出现 "[Doctrine\DBAL\DBALException] Unknow column type "enum" requested. " 时, 需要手动进入edusoho数据库执行以下命令:
ALTER TABLE `ip_blacklist` MODIFY `type` enum('failed','banned') NOT NULL DEFAULT 'failed' COMMENT '禁用类型'
新部署的开发环境直接在 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。
cd <edusoho-dir>
git checkout v7.2.5
app/console doctrine:migrations:migrate # 执行老版本到7.2.5之间的migration
git checkout develop
# 执行migrate可能会报enum type的错误, 请先手动去掉ip_blacklist表里type字段的注释然后再执行此命令
bin/phpmig migrate #执行7.2.5到develop之间的migration;
如果当前在7.2.5之后,直接切换到develop,执行bin/phpmig migrate命令,如果命令执行途中某个version有报错信息,暂时先把该version的up方法注释掉然后重新执行migrate命令,以确保migration能正确执行。
EduSoho 8.0 版本更新了 Symfony 的版本到 2.8 去掉了一些无用的包如 ORM 等。7.0 的 vendor 目录是在 vendor2
目录下,由于 php composer
默认使用 vendor
目录,这导致我们增加新的依赖包十分的不方便,所以8.0中将原先的 vendor2
目录清除了,改为了 。
插件
现目录结构:
plugins/
HelloworldPlugin/
Biz/
Dao/
Service/
Controller/
Migrations/
Resources/
config
static-dist
static-src
Scripts/
BaseInstallScript.php
InstallScript.php
HelloworldPlugin.php
plugin.json
- 修改插件名,须带后缀Plugin;
- 把
HelloworldBundle下
的目录和文件移到与HelloworldBundle
的平级目录,删除HelloworldBundle
目录; - 修改
HelloworldBundle.php
名字为HelloworldPlugin.php
,需要继承 ; - 新建
Biz
目录及其相应子目录,把service
下的文件移到Biz
相应目录下; - 把
public
的目录移到static-src
目录下,删除public
目录,且把js
目录下的controller
下的目录文件移到js
目录下,删除controller
目录; - 修改所有PHP文件的 namespace。
在一段时期内,还是会兼容老的插件机制。老的插件机制命令已经更名成:
old-plugin:create
old-plugin:refresh
old-plugin:register
old-plugin:remove
新的插件命令,请参考新插件的使用文档:。
已安装的插件,原会写入 app/data/plugin_installed.php
文件,新插件会写入到 app/config/plugin.php
。
定制开发 Custom 目录下 twig/controller/routing.yml 等覆盖
Symfony 框架会按上面指定的 bundle
覆盖 Resources/
目录下的相同文件,功能和之前的 template_overwrite_map
一样。 注意 Resources/
目录下所有的重名文件都会覆盖。此外,相同名字controller,也会直接覆盖。所以:
- Custom 下所有的与 Topxia 同名 Controller,必须继承 Topxia 的 Controller。
- 目前Custom下的路由配置文件,已经改成 ,
custom_admin_routing.yml
。
详见 Symfony 官方文档:http://symfony.com/doc/2.8/bundles/inheritance.html。