在 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 请求并在前端处理响应。
希望这对任何人都有帮助。
我已遵循教程 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 请求并在前端处理响应。
希望这对任何人都有帮助。