如何扩展 Shopware 6 控制器操作

2024-06-25

我正在为 Shopware 6 构建一个插件,但似乎找不到任何有关如何扩展现有控制器操作的文档。我找到了这个如何向 Shopware 中的帐户控制器添加操作 https://stackoverflow.com/questions/46340089/how-to-add-an-action-to-account-controller-in-shopware但它似乎指的是 Shopware 5,我不确定是否可以在 Shopware 6 中使用它。

我想要扩展的控制器操作是\Shopware\Storefront\Controller\AddressController::saveAddress- 就我而言,我想添加自定义地址验证,该验证将使用我的插件中的一项服务,其中将向第 3 方 API 发出请求,如果地址正确则允许该地址,如果不正确则返回错误。也许最好是延长\Shopware\Core\Checkout\Customer\SalesChannel\AddressService::save但我现在不知道(我一般来说是 Shopware 的新手)。扩展服务意味着我不必覆盖整个操作逻辑,以便它在中间包含我的检查。或者也许有一个事件可以用于地址保存(同样的事情,无法找到 Shopware6 的良好事件源/列表)。

这里似乎有指南:https://docs.shopware.com/en/shopware-platform-dev-en/developer-guide/controller https://docs.shopware.com/en/shopware-platform-dev-en/developer-guide/controller和这里:https://docs.shopware.com/en/shopware-platform-dev-en/how-to/custom-storefront-controller https://docs.shopware.com/en/shopware-platform-dev-en/how-to/custom-storefront-controller但这些只描述了如何制作一个新的控制器,它对我来说不是很有用,因为我不想添加任何新的路由而是使用现有的路由/account/address/create.

我将非常感谢您提供有关如何在插件(config、xml)中注册覆盖以及扩展类的外观的代码示例。如果要求不是太多,理想的答案将包含以下示例:

  1. 如何扩展现有控制器的操作。
  2. 如何扩展现有服务。
  3. 在哪里找到控制器/服务中正在触发的事件,订阅它并使其覆盖默认行为(例如抛出Shopware\Core\Framework\Validation\Exception\ConstraintViolationException).

  1. 扩展/覆盖操作是没有意义的,因为操作应该尽可能精简,并且所有业务逻辑都应该处于服务状态。

  2. 要扩展现有服务,您可以对其进行装饰或订阅某些事件来扩展功能。看https://docs.shopware.com/en/shopware-platform-dev-en/how-to/decorating-a-service https://docs.shopware.com/en/shopware-platform-dev-en/how-to/decorating-a-service

  3. 对于您的情况,您可以订阅framework.validation.address.create or/and framework.validation.address.update事件来扩展约束列表。一般来说,所有验证事件都有前缀framework.validation.第二部分定义于\Shopware\Core\Framework\Validation\DataValidationFactoryInterface在你的情况下实施是\Shopware\Core\Checkout\Customer\Validation\AddressValidationFactory

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何扩展 Shopware 6 控制器操作 的相关文章

  • 在 Zend Framework 中设置视图缩进

    在 Zend Framework 中 可以为 headMeta headLink 等设置缩进 我喜欢这个 我喜欢东西整齐 所以 现在我想在布局 phtml文件 导致视图脚本中的每个新行都用 X 制表符缩进 这是行不通的 有没有办法在 Zen
  • 检查行是否存在,Laravel

    我有以下数据库结构 items id name user id users table id name user favorites table id user id item id 在我的项目永久链接页面上 我有一个 添加到收藏夹 按钮
  • 改变了 (un)serialize() 的行为?

    编辑 问题是现在已记录的 php 错误 https bugs php net bug php id 71617 https bugs php net bug php id 71617感谢您找到那个 Danack 我刚刚将应用程序从 PHPH
  • PHP的rand函数真的有那么糟糕吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 PHP 中按字母顺序比较 2 个字符串?

    标题说什么 具体来说 如果我有 array1 name zoo array2 name fox 我怎样才能确定按字母顺序排列 array2的名字应该出现在上面 array1 s Use strcmp http www php net str
  • 在 php 文件上调用 exec 并传递参数?

    我想使用调用 php 文件exec http nz php net manual en function exec php 当我调用它时 我希望能够通过 id 传递变量 我可以打电话echo exec php var www unity s
  • 销毁Session但保留flashdata

    我在用坦克验证 http www konyukhov com soft tank auth 用于我的 CI 1 7 3 应用程序中的用户管理 一切工作正常 但我正在尝试设置flash message当用户注销时显示 问题是 this gt
  • 在 Rails 3 中使用 jQuery 插件

    完成哈特尔的伟大导轨教程我现在正在努力实现非常好的目标jQuery 新手到忍者由卡斯尔丁和沙基创作 虽然我能够在我的 Rails 项目中包含 jquery js 和 jquery ui js 但在添加其他 jQuery 插件时我遇到了困难
  • 防止我的 PHP 网络爬虫停止运行

    我正在使用 PHPCrawl 类并添加了一些 DOMDocument 和 DOMXpath 代码来从网页中获取特定数据 但是脚本在接近爬行整个网站之前就停止了 我已将 set time limit 设置为 100000000 因此这不应该成
  • php imagecopyresampled 添加黑色背景

    我有一个调整图像大小的脚本 它采用 130x81 图像并将其添加到 130x130 图像中 当 imagecopyresampled 函数运行时 它会在剩余的空间中添加黑色背景 即使基本图像是白色的 下面的代码 我真的很感激一些帮助 The
  • 仅限使用一张优惠券,删除 Woocommerce 中之前使用的其他优惠券

    我正在动态制作优惠券以使用用户电子邮件作为优惠券 但如何限制用户每个购物车仅使用一张优惠券 如果使用多个自动从购物车中删除前一个 add filter woocommerce get shop coupon data generate co
  • 根据送货方式 ID 在 WooCommerce 新订单电子邮件通知中隐藏送货地址

    如果送货标签名为 在洛克菲勒商店提货 我想隐藏送货地址 但要显示其他提货方法 有太多的 id 例如 local pickup 3 我无法过滤 我启用了显示送货地址的功能电子邮件 电子邮件地址 php https github com woo
  • 致命错误:在非对象上调用成员函数 FetchRow()

    这是我的错误消息致命错误 Call to a member function FetchRow on a non object in C AppServ www hfix include care api classes class min
  • Vim supertab 和 jedi-vim

    作为后续发布如何检查SuperTab和jedi vim是否激活 https stackoverflow com questions 13179582 how to check if supertab and jedi vim is acti
  • simplexml_load_string 函数出现巨大的输入查找错误

    我有一个大小不同的 API 响应 当我尝试使用将 xml 对象转换为 std 对象时 它不会在大型 xml 数据 约 20MB 上显示错误 这是我的代码 xml simplexml load string apiResponse objec
  • Laravel 4 类如何检测它是在 Artisan 任务中运行还是在浏览器请求中运行?

    我有一些应用程序启动代码 需要知道它当前是在 artisan 任务中运行还是在浏览器请求中调用 我如何在 Laravel 4 中检测到这一点 这是最好的方法 if App runningInConsole echo Running in a
  • 如何使用 Amazon S3 SDK 更新元数据

    我正在使用 Amazon 的 AWS SDK 的 PHP 版本 我有一堆带有Expires标头 我想删除该标头并添加一个Cache control标题代替 这更新对象 http docs amazonwebservices com AWSS
  • PHP、MySQL 验证故障且搜索不起作用?

    我创建了一个小的注册粘性表格 一切工作正常 但如果我输入任何错误的值 例如姓名中的数字 年龄中的字母甚至错误的电子邮件格式 那么数据仍然保存在数据库中 我无法找出验证问题 另外一个是搜索选项 每当我在搜索框中输入任何名字或姓氏时 它都应该显
  • 如何在 Laravel 5.3 中使用标头参数调用 SOAP wsdl?

    I use artisaninweb laravel soap包来运行 SOAP wsdl 文件 为了解析 WSDL 文件 我需要将其与标头参数一起调用 所以换句话来说 首先我需要设置标头参数 然后将其与此参数一起调用 在我的 larave
  • cURL 错误 28:5001 毫秒后解析超时

    我使用 WordPress 最近将我的网站从 cpanel 主机移动到带有 directadmin 面板的 Linux 服务器 转账后立即发现客户在通过EDD插件下载时出现以下错误 cURL 错误 28 5001 毫秒后解析超时 我也遇到了

随机推荐