在 Sylius 中使用 Ajax 添加到购物车

Using Ajax to add to cart in Sylius

我已遵循教程 here 并且能够更改重定向路由。但我希望这纯粹是用 Ajax 完成的,并且购物车总数会自动更新。但是我无法覆盖 sylius 供应商目录中的 javascript。有没有人设法仅使用 Ajax 做到这一点?

我已按照 Sylius 说明书文档更改添加到购物车后的重定向,详情请见此处。创建的重定向 class return 是一个新的重定向路由:

$newUrl = $this->router->generate('your_new_route_name', []); 
$event->setResponse(new RedirectResponse($newUrl));

Ajax 已用于添加到购物车,之后会发生重定向。我尝试将此代码更改为 return 一个简单的响应 ('Success', 200).

然而,这会导致供应商目录中处理 ajax 请求的脚本出错。

$.each(response.errors.errors, function (key, message) {
    validationMessage += message;
});

Uncaught TypeError: Cannot read property 'errors' of undefined
  at HTMLFormElement.onFailure (app.js:1363)
  at Object.fail (app.js:23)
  at i (app.js:2)
  at Object.fireWith [as rejectWith] (app.js:2)
  at app.js:23

指南告诉我在前端处理这个问题,但我不完全确定如何在供应商目录中访问这个脚本。该脚本是位于 ShopBundle 中的 sylus-add-to-cart.js。

亲切的问候

亚伦

我通过向 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 请求并在前端处理响应。

希望这对任何人都有帮助。