Как расширить действие контроллера Shopware 6 - PullRequest
1 голос
/ 05 августа 2020

Я создаю плагин для 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) и как будет выглядеть расширяющийся класс. Если это не слишком много, идеальный ответ будет содержать пример:

  1. Как расширить действие для существующего контроллера.
  2. Как расширить существующий сервис.
  3. Где узнать, какое событие запускается в контроллере / службе, подписаться на него и сделать так, чтобы оно переопределило поведение по умолчанию (например, throw Shopware\Core\Framework\Validation\Exception\ConstraintViolationException).

1 Ответ

1 голос
/ 05 августа 2020
  1. Нет смысла расширять / отменять действие, так как действие должно быть настолько тонким, насколько это возможно, и все бизнес-логи c должны быть в эксплуатации.

  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

...