我正在为 Shopware 6 构建一个插件,但似乎找不到任何有关如何扩展现有控制器操作的文档。我找到了这个如何向 Shopware 中的帐户控制器添加操作 https://stackoverflow.com/questions/46340089/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/developer-guide/controller和这里:https://docs.shopware.com/en/shopware-platform-dev-en/how-to/custom-storefront-controller https://docs.shopware.com/en/shopware-platform-dev-en/how-to/custom-storefront-controller但这些只描述了如何制作一个新的控制器,它对我来说不是很有用,因为我不想添加任何新的路由而是使用现有的路由/account/address/create
.
我将非常感谢您提供有关如何在插件(config、xml)中注册覆盖以及扩展类的外观的代码示例。如果要求不是太多,理想的答案将包含以下示例:
- 如何扩展现有控制器的操作。
- 如何扩展现有服务。
- 在哪里找到控制器/服务中正在触发的事件,订阅它并使其覆盖默认行为(例如抛出
Shopware\Core\Framework\Validation\Exception\ConstraintViolationException
).
-
扩展/覆盖操作是没有意义的,因为操作应该尽可能精简,并且所有业务逻辑都应该处于服务状态。
-
要扩展现有服务,您可以对其进行装饰或订阅某些事件来扩展功能。看https://docs.shopware.com/en/shopware-platform-dev-en/how-to/decorating-a-service https://docs.shopware.com/en/shopware-platform-dev-en/how-to/decorating-a-service
-
对于您的情况,您可以订阅framework.validation.address.create
or/and framework.validation.address.update
事件来扩展约束列表。一般来说,所有验证事件都有前缀framework.validation.
第二部分定义于\Shopware\Core\Framework\Validation\DataValidationFactoryInterface
在你的情况下实施是\Shopware\Core\Checkout\Customer\Validation\AddressValidationFactory
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)