Я создаю плагин для Shopware 6 и не могу найти никакой документации относительно того, как расширить существующее действие контроллера. Я нашел это Как добавить действие к контроллеру учетной записи в Shopware , но похоже, что это относится к Shopware 5, и я не уверен, что могу использовать его таким образом в Shopware 6.
Контроллер действие, которое я хочу расширить, - \Shopware\Storefront\Controller\AddressController::saveAddress
- в моем случае я хочу добавить настраиваемую проверку адреса, которая будет использовать службу в моем плагине, где будет выполняться запрос к стороннему API, если адрес правильный, тогда разрешите адрес, если не тогда возвращать ошибку. Возможно, лучше вместо этого расширить \Shopware\Core\Checkout\Customer\SalesChannel\AddressService::save
, но пока я понятия не имею (я новичок в Shopware в целом). Расширение службы означало бы, что мне не нужно переопределять всю логику действий c, чтобы она содержала мой чек посередине. Или, возможно, есть событие, которое я могу использовать для сохранения адреса (то же самое, не могу найти хороший источник / список событий для 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
).