我已按照教程here操作,可以更改重定向路由。但我希望这完全是用Ajax完成的,并且购物车总数会自动更新。但是我无法在sylius的供应商目录中覆盖javascript。有没有人只使用纯粹的Ajax设法做到这一点?
我已经按照Sylius cookbook文档更改了重定向后添加到购物车详细信息。创建的重定向类返回一个新的重定向路由:
SELECT Name, id
FROM yourTable
WHERE id <> -1 AND id <> -2
AND KID <> 2 AND KID <> 8
AND Name IS NOT NULL
Ajax已用于添加到购物车,之后会发生重定向。我尝试更改此代码以返回简单的响应(&#39;成功&#39;,200)。
然而,这会导致处理ajax请求的供应商目录中的脚本出错。
$newUrl = $this->router->generate('your_new_route_name', []);
$event->setResponse(new RedirectResponse($newUrl));
该指南告诉我在前端处理此问题,但我不完全确定如何在供应商目录中访问此脚本。该脚本是位于ShopBundle中的sylus-add-to-cart.js。
亲切的问候
亚伦
答案 0 :(得分:4)
我通过向routing.yml文件添加一些自定义路由来实现这一点。
sylius_shop_partial_cart_add_item_ajax:
path: /add-item
methods: [GET]
defaults:
_controller: sylius.controller.order_item:addAction
_sylius:
template: $template
factory:
method: createForProduct
arguments: [expr:notFoundOnNull(service('sylius.repository.product').find($productId))]
form:
type: Sylius\Bundle\CoreBundle\Form\Type\Order\AddToCartType
options:
product: expr:notFoundOnNull(service('sylius.repository.product').find($productId))
sylius_shop_ajax_cart_item_remove_ajax:
path: /{id}/remove
methods: [DELETE]
defaults:
_controller: sylius.controller.order_item:removeAction
_format: json
然后我添加了使用表单选择器在提交时创建ajax请求并在前端处理响应。
希望这有助于任何人。