Mautic 4.0版本升级指南:重大变更与兼容性说明
平台要求变更
Mautic 4.0对运行环境提出了更高要求,PHP最低版本从7.3提升至7.4。这一变更主要是为了利用PHP 7.4引入的新特性,如类型属性、箭头函数等,这些特性能够提升代码质量和性能。
API重大变更
OAuth1认证支持已被完全移除,Mautic现在仅支持OAuth2标准协议。开发者需要特别注意,Mautic 4.0新增了Client Credentials授权模式,这种模式特别适合机器对机器(M2M)的认证场景。
Symfony 4升级影响
服务容器变更
Symfony 4中服务默认变为私有,Mautic虽然保留了将服务注册为公共的机制,但强烈建议开发者采用依赖注入方式访问服务。特别需要注意的是:
- 控制器中通过容器直接获取Symfony服务的方式可能不再可用
- 命令(Commands)和服务(services)都应优先使用依赖注入
表单类型变更
YesNoButtonGroupType
表单类型现在使用true/false值而非之前的0/1。这一变更可能导致:
- 使用NotBlank约束的表单验证可能失效
- 功能测试中提交值为0的YesNoButtonGroupType字段可能产生问题
模板引擎迁移策略
Symfony官方已弃用PHP模板引擎,Mautic 4.3开始推荐:
- 新开发的内置Bundle必须使用Twig模板
- 新开发的插件也应采用Twig模板
- 现有Bundle将逐步从PHP迁移到Twig
Mautic 4.3已提供content.html.twig
模板,开发者可以基于此模板进行扩展。需要注意的是,在升级到Symfony 5之前,两种模板引擎可以共存。
依赖包变更
移除的包
- debril/rss-atom-bundle:RSS/Atom解析功能
- egeloen/ordered-form-bundle:表单排序功能
- sensio/distribution-bundle:Symfony分发工具
- joomla/http:HTTP客户端功能
- 其他测试相关包
升级的包
主要依赖包版本升级包括:
- Symfony全家桶升级到4.x系列
- Doctrine相关包全面升级
- FOSRestBundle升级到3.x
- 其他如JMSSerializerBundle、OneupUploaderBundle等均有版本提升
命令与服务变更
命令相关
ModeratedCommand::$lockHandler
属性变为私有- 安装命令(
InstallCommand
)进行了错误修复和严格性增强
服务相关
HTTP客户端服务进行了重大升级:
mautic.http.client
从Guzzle 6升级到7- 移除了
mautic.http.connector
服务 - 现在支持PSR-18标准的
ClientInterface
开发者现在可以这样使用HTTP客户端:
use Psr\Http\Client\ClientInterface;
class DemoClass {
public function __construct(ClientInterface $client) {
$this->client = $client;
}
}
插件与集成变更
集成相关
INTEGRATION_CONFIG_BEFORE_SAVE
事件触发时机调整,现在插件开发者可以获取用户提交的更新值,便于在持久化前修改配置。
插件相关
AbstractIntegration::makeRequest
方法现在返回PSR-7标准的ResponseInterface
PLUGIN_ON_INTEGRATION_RESPONSE
事件的响应对象也变为PSR-7标准
Webhook变更
WebhookBundle中移除了多个队列相关方法,包括:
- getQueues()
- addQueues()
- addQueue()
- removeQueue()
这些方法没有替代方案,开发者需要调整相关代码。
企业联系人功能增强
Mautic 4.0新增了对企业联系人唯一字段的支持:
- 默认使用"公司名称"作为唯一字段
- 支持配置其他字段作为唯一标识
- 支持字段间的AND/OR逻辑组合
其他变更
VersionProvider
的第二个构造函数参数被移除- 多项内部优化和重构
升级建议
- 首先确保环境满足PHP 7.4要求
- 检查所有自定义插件和集成,特别是涉及:
- OAuth认证
- HTTP请求
- 表单验证
- 服务容器使用
- 逐步将模板迁移到Twig引擎
- 测试所有自定义功能,特别是涉及Webhook队列的部分
通过以上变更,Mautic 4.0在性能、安全性和开发体验上都有显著提升,虽然带来了一些兼容性挑战,但为未来的发展奠定了更好的基础。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考