EspoCRM 9.0版本后端重大变更解析

EspoCRM 9.0版本后端重大变更解析

【免费下载链接】espocrm EspoCRM – Open Source CRM Application 【免费下载链接】espocrm 项目地址: https://gitcode.com/GitHub_Trending/es/espocrm

前言

EspoCRM作为一款开源CRM系统,在其9.0版本中对后端架构进行了重大重构。本文将详细解析这些变更内容,帮助开发者理解并适应新版本的变化。

核心架构变更

钩子(Hook)系统重构

旧版本中通过继承Espo\Core\Hooks\Base类实现钩子的方式已被移除。新版本推荐两种替代方案:

  1. 使用接口方式实现特定钩子
  2. 直接创建不继承任何基类的钩子类

对于依赖注入,现在需要在构造函数中显式声明所需依赖项,如实体管理器等。系统提供了临时兼容层,但会记录警告提示开发者更新代码。

ORM系统调整

ORM层进行了多项重要调整:

实体(Entity)变更

  • 移除了直接访问id属性的能力,改为使用getId()方法
  • get()方法被移除,改为通过实体管理器获取关系
  • toArray()方法更名为getValueMap()
  • 字段相关方法命名更加规范,如hasField()改为hasAttribute()

仓储(Repository)变更

  • 关系操作方法全部重构,统一通过getRelation()方法获取关系处理器
  • 查询构建器方法更加规范,如groupBy()改为group()
  • 移除了RDB基类,改用Database作为基础仓储类

集合(Collection)变更

  • toArray()方法更名为getValueMapList()

权限系统重构

ACL系统进行了彻底的重构:

  1. 移除了所有基类实现,包括Espo\Core\Acl\BaseEspo\Core\AclPortal\Base
  2. 自定义实体类型的ACL类需要迁移到新的ACL框架
  3. AclManager类中的方法命名更加规范,如checkIsOwner()改为checkOwnershipOwn()

服务层变更

记录服务(Record Service)中移除了大量受保护属性,这些配置现在统一通过元数据定义。包括:

  • 访问控制相关属性如noEditAccessRequiredForLink
  • 字段处理相关属性如forbiddenAttributeList
  • 关系处理相关属性如duplicatingLinkList

同时移除了handleInput()方法,输入处理逻辑现在由框架统一管理。

依赖注入调整

旧版本中通过Injectable接口或Espo\Core\Injectable类实现的依赖注入方式已被移除。新版本强制使用构造函数注入方式,这符合现代PHP开发的最佳实践。

元数据加载机制

元数据中app > loader部分的DI服务定义不再有效,需要迁移到app > containerServices中定义。这种变更使得服务定义更加集中和明确。

其他重要变更

  1. 移除了多个基类,包括各种Base类和过时的服务基类
  2. 文件管理器移除了getContents()方法
  3. 查询构建器移除了旧式参数传递方式
  4. 数据库模式构建器不再支持文件定义表结构

迁移建议

对于正在开发或维护EspoCRM扩展的开发者,建议:

  1. 优先检查所有钩子实现,移除基类继承
  2. 更新所有ORM相关操作,使用新的关系处理器API
  3. 重构ACL实现,采用新的权限框架
  4. 将服务配置迁移到新的元数据位置
  5. 全面转向构造函数依赖注入

这些变更虽然带来了短期内的适配成本,但从长期来看将使代码更加规范、可维护性更高,也更能适应现代PHP开发实践。

【免费下载链接】espocrm EspoCRM – Open Source CRM Application 【免费下载链接】espocrm 项目地址: https://gitcode.com/GitHub_Trending/es/espocrm

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值