Sylius结账流程自定义覆盖失败,路由配置无效求助
问题描述
首次使用Sylius框架,想完全替换默认结账流程,尝试在routes.yaml里配置自定义路由覆盖原有结账路由,但配置没生效。添加的路由代码如下:
sylius_checkout_address: path: /checkout/address methods: [GET, POST] defaults: _controller: open_marketplace.controller.test_controller::helloWorld sylius_checkout_select_shipping: path: /checkout/select-shipping methods: [GET, POST] defaults: _controller: open_marketplace.controller.test_controller::helloWorld sylius_checkout_select_payment: path: /checkout/select-payment methods: [GET, POST] defaults: _controller: open_marketplace.controller.test_controller::helloWorld sylius_checkout_complete: path: /checkout/complete methods: [GET, POST] defaults: _controller: open_marketplace.controller.test_controller::helloWorld
原本测试只希望访问结账页面输出hello world,结果还是跳转到原有结账流程。
解决方案
核心原因
Sylius的核心路由是通过config/packages/sylius.yaml导入的,默认情况下自定义路由会在核心路由之后加载,同名路由后加载的不会覆盖先加载的,所以你的配置没生效。
具体解决步骤
调整路由加载顺序
打开config/routes.yaml,把你的自定义结账路由放在Sylius核心路由导入的上方,确保自定义路由先加载:# 自定义结账路由(优先加载) sylius_checkout_address: path: /checkout/address methods: [GET, POST] defaults: _controller: open_marketplace.controller.test_controller::helloWorld sylius_checkout_select_shipping: path: /checkout/select-shipping methods: [GET, POST] defaults: _controller: open_marketplace.controller.test_controller::helloWorld sylius_checkout_select_payment: path: /checkout/select-payment methods: [GET, POST] defaults: _controller: open_marketplace.controller.test_controller::helloWorld sylius_checkout_complete: path: /checkout/complete methods: [GET, POST] defaults: _controller: open_marketplace.controller.test_controller::helloWorld # Sylius核心路由(后加载) sylius_shop: resource: "@SyliusShopBundle/Resources/config/routing.yaml" prefix: /{_locale} requirements: _locale: ^[A-Za-z]{2,4}(_([A-Za-z]{4}|[0-9]{3}))?(_([A-Za-z]{2}|[0-9]{3}))?$ # 其他Sylius相关路由...清除缓存
修改路由后必须清缓存,否则新配置不会生效:php bin/console cache:clear生产环境记得加
--env=prod参数。验证路由是否生效
用下面的命令查看目标路由的控制器信息,确认是否替换成功:php bin/console debug:route sylius_checkout_address输出里的
Controller字段应该显示你自定义的控制器和方法。规范扩展方案(可选)
更符合Sylius扩展规范的做法是创建自己的Bundle,在Bundle的Resources/config/routing.yaml里定义路由,然后在config/bundles.php里把你的Bundle放在SyliusShopBundle前面注册,这样路由会自动优先加载,不用手动调整routes.yaml的顺序。
内容的提问来源于stack exchange,提问作者Luigi Gandemer
相关产品推荐
相关产品推荐

