为了账号安全,请及时绑定邮箱和手机立即绑定

如何扩展 Shopware 6 控制器操作

如何扩展 Shopware 6 控制器操作

PHP
墨色风雨 2023-09-15 17:45:51
我正在为 Shopware 6 构建一个插件,但似乎找不到任何有关如何扩展现有控制器操作的文档。我发现这个How to add an Action to Account Controller in Shopware但它似乎引用了 Shopware 5,我不确定我是否可以在 Shopware 6 中使用它。我想要扩展的控制器操作是\Shopware\Storefront\Controller\AddressController::saveAddress- 在我的例子中,我想添加自定义地址验证,该验证将使用我的插件中的一项服务,其中将向第 3 方 API 发出请求,如果地址正确,则允许该地址,如果不正确然后返回一个错误。也许最好是扩展\Shopware\Core\Checkout\Customer\SalesChannel\AddressService::save,但我现在没有任何线索(我一般是 Shopware 的新手)。扩展服务意味着我不必覆盖整个操作逻辑,以便它在中间包含我的检查。或者也许有一个事件可以用于地址保存(同样的事情,无法找到 Shopware6 的良好事件源/列表)。这里似乎有指南:https: //docs.shopware.com/en/shopware-platform-dev-en/developer-guide/controller 和这里: https: //docs.shopware.com/en/shopware-platform -dev-en/how-to/custom-storefront-controller 但这些仅描述了如何制作新控制器,对我来说不是很有用,因为我不想添加任何新路线而是使用现有路线/account/address/create。我将非常感谢您提供有关如何在插件(config、xml)中注册覆盖以及扩展类的外观的代码示例。如果要求不是太多,理想的答案将包含以下示例:如何扩展现有控制器的操作。如何扩展现有服务。在哪里找到控制器/服务中正在触发的事件,订阅它并使其覆盖默认行为(例如 throw Shopware\Core\Framework\Validation\Exception\ConstraintViolationException)。
查看完整描述

1 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

  1. 扩展/覆盖操作是没有意义的,因为操作应该尽可能精简,并且所有业务逻辑都应该处于服务状态。

  2. 要扩展现有服务,您可以对其进行装饰或订阅某些事件以扩展功能。请参阅https://docs.shopware.com/en/shopware-platform-dev-en/how-to/decorating-a-service

  3. 在您的情况下,您可以订阅framework.validation.address.create或/和framework.validation.address.update事件来扩展约束列表。一般来说,所有验证事件都有前缀framework.validation.第二部分是\Shopware\Core\Framework\Validation\DataValidationFactoryInterface在您的情况下在实现中定义的\Shopware\Core\Checkout\Customer\Validation\AddressValidationFactory


查看完整回答
反对 回复 2023-09-15
  • 1 回答
  • 0 关注
  • 82 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信