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

时间:2017-03-31 19:44:14

标签: javascript php ajax symfony sylius

我已按照教程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。

亲切的问候

亚伦

1 个答案:

答案 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请求并在前端处理响应。

希望这有助于任何人。