Shopware 6.6版本升级指南与技术解析
版本6.6.10.1修复内容
商业插件更新时的服务异常修复
在升级到6.6.10.0版本时,如果商业插件处于激活状态但未更新,会导致ServiceNotFoundException
异常抛出。开发团队通过添加旧服务的别名来解决这个问题,确保在更新过程中商业插件能够正常运行。
Messenger中间件编译优化
MessengerMiddlewareCompilerPass
现在能够更好地处理中间件尚未定义的情况,这一改进确保了中间件能够正确地在应用中被注册。
版本6.6.10.0重要变更
实体扩展接口变更
EntityExtension::getDefinitionClass
方法已被标记为废弃,因为基于PHP属性的自定义实体不再需要定义类。开发者应迁移到新的EntityExtension::getEntityName
方法,直接返回实体名称即可。
迁移示例:
// 旧方式
public function getDefinitionClass(): string {
return ProductDefinition::class;
}
// 新方式
public function getEntityName(): string {
return ProductDefinition::ENTITY_NAME;
}
批量实体扩展功能
新增的BulkEntityExtension
类允许在一个类中为多个实体定义字段,减少了为每个实体创建单独类的开销。
使用示例:
class MyEntityExtension extends BulkEntityExtension {
public function collect(): \Generator {
yield ProductDefinition::ENTITY_NAME => [
new FkField('follow_up_id', 'followUp', ProductDefinition::class),
new ManyToOneAssociationField('followUp', 'follow_up_id', ProductDefinition::class, 'id')
];
}
}
外部URL媒体存储
现在可以通过管理API将媒体路径存储为外部URL,这为媒体管理提供了更大的灵活性,无需在服务器上存储物理文件。
API请求示例:
{
"id": "01934e0015bd7174b35838bbb30dc927",
"mediaFolderId": "01934ebfc0da735d841f38e8e54fda09",
"path": "https://test.com/photo/2024/11/30/sunflowers.jpg",
"fileName": "sunflower",
"mimeType": "image/jpeg"
}
前端技术改进
地址编辑器重构
旧的地址编辑器插件和模板已被废弃,开发者应迁移到新的address-manager
系列组件:
- 替换
address-editor.plugin.js
为address-manager.plugin.js
- 更新相关模板文件到对应的新版本
新增地址搜索插件
新增了address-search.plugin.js
插件,用于在新的模态框和地址账户页面中搜索客户地址。
表单可访问性改进
对前端表单处理进行了全面改造,实现了以下最佳实践:
- 移除了原生浏览器验证,改用自定义验证
- 优化了必填字段标记方式
- 实现了即时字段验证反馈
- 改进了错误提示和视觉反馈
新表单验证服务:
<form data-form-handler="true">
<input type="email" data-validation="required,email">
</form>
可用验证器:
required
:必填验证email
:邮箱格式验证confirmation
:字段一致性验证minLength
:最小长度验证
缓存系统改进
MySQL缓存失效存储
新增了基于MySQL的缓存失效存储方案,为没有Redis环境的用户提供了延迟缓存失效的替代方案。
配置示例:
shopware:
cache:
invalidation:
delay: 1
delay_options:
storage: mysql
反向代理缓存清理器废弃
ReverseProxyCacheClearer
将在下个主版本中移除,建议改用cache:clear:http
命令来清理HTTP缓存。
邮件系统更新
OAuth2认证支持
使用OAuth2认证的邮件发送配置需要更新:
- 在管理后台选择"SMTP server with OAuth2"选项
- 填写必要字段
- 测试连接并检查错误日志
枚举类型支持
新增了对PHP BackedEnum
类型的支持,可以与数据库ENUM类型配合使用,实现类型安全的字段值限制。
实现示例:
enum PaymentProvider: string {
case PAYPAL = 'paypal';
case CREDIT_CARD = 'credit_card';
}
class EntityDefinition extends EntityDefinition {
public function getFields(): FieldCollection {
return new FieldCollection([
new EnumField('paymentProvider', 'payment_provider', PaymentProvider::CREDIT_CARD),
]);
}
}
结语
Shopware 6.6版本带来了多项重要改进,特别是在实体扩展、表单可访问性和缓存管理方面。开发者应特别注意废弃功能的迁移路径,并充分利用新引入的功能来提升开发效率和用户体验。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考