Я хочу добавить шаг оформления заказа в процесс оформления покупки. Это работает в том смысле, что когда я нахожусь в обзоре корзины и нажимаю кнопку «Оформить заказ», отображается мой добавленный шаг. Но когда я нажимаю «Далее», я получаю сообщение об ошибке «Невозможно сгенерировать URL для названного маршрута« sylius_order_index », так как такой маршрут не существует».
То, что я сделал до сих пор (сейчас, чтобы избежать отвлечения, я назвал свой этап проверки «test»):
config / packages / _sylius.yaml:
winzou_state_machine:
sylius_order_checkout:
states:
test_selected: ~
transitions:
select_test:
from: [cart, test_selected, addressed, shipping_selected, shipping_skipped, payment_selected, payment_skipped]
to: test_selected
address:
from: [cart, test_selected, addressed, shipping_selected, shipping_skipped, payment_selected, payment_skipped]
to: addressed
select_shipping:
from: [addressed, test_selected, shipping_selected, payment_selected, payment_skipped]
to: shipping_selected
select_payment:
from: [payment_selected, test_selected, shipping_skipped, shipping_selected]
to: payment_selected
callbacks:
after:
sylius_process_cart:
on: ["select_shipping", "address", "select_payment", "skip_shipping", "skip_payment", "select_test"]
do: ["@sylius.order_processing.order_processor", "process"]
args: ["object"]
sylius_shop:
product_grid:
include_all_descendants: true
checkout_resolver:
route_map:
cart:
route: sylius_shop_checkout_test
test_selected:
route: sylius_shop_checkout_address
route / Checkout / checkout.yml:
sylius_shop_checkout_start:
path: /
methods: [GET]
defaults:
_controller: FrameworkBundle:Redirect:redirect
route: sylius_shop_checkout_test
sylius_shop_checkout_test:
path: /test
methods: [GET, PUT]
defaults:
_controller: sylius.controller.order:updateAction
_sylius:
event: test
flash: false
template: "Checkout/Test/test.html.twig"
form:
type: App\Form\TestType
repository:
method: findCartForAddressing
arguments:
- "expr:service('sylius.context.cart').getCart().getId()"
state_machine:
graph: sylius_order_checkout
transition: select_test
#after this all other states as they are in native Sylius in this file. The original checkout.yml is completely overridden with this one.
Я следовал за компилятором в MY в отличие от шагов проверки NATIVE, и разница в том, что в
Bundle / Controller / ResourceController. php строка 311:
$postEventResponse = $postEvent->getResponse();
if (null !== $postEventResponse) {
return $postEventResponse;
}
Объект Response является нулевым (таким образом, if не попадает в, и компилятор продолжает генерировать произвольное / вводящее в заблуждение сообщение об ошибке, упомянутое выше). Итак, я заметил, что это происходит потому, что в
symfony / event-dispatcher / EventDispatcher. php строка 72:
if ($listeners) {
$this->callListeners($listeners, $eventName, $event);
}
$ listeners в моем случае пустой массив, тогда как для всех остальных нативных На шаге sylius подписан как минимум 1 слушатель. Я просто не знаю, где это добавить. Кто-нибудь может указать мне, где / как это делается?