Shopware 6中促销代码未找到提示消息修改问题
修改Shopware促销代码未找到提示消息的方案
针对你遇到的修改"Promotion with code {code} not found!"提示无效的问题,以下是可行的解决步骤:
1. 正确覆盖Snippet(推荐方式)
这个提示对应的snippet key是promotion-not-found,若之前修改无效,可能是路径或方式错误:
- 不要直接修改核心文件,请通过自定义主题或插件覆盖:
- 主题路径:
src/Resources/snippet/[你的语言目录,比如en-GB]/messages.json - 插件路径:
src/Resources/snippet/[你的语言目录]/messages.json - 在文件中添加:
{ "promotion-not-found": "自定义提示文本:促销代码 {{ promotionCode }} 不存在,请检查!" } - 注意保留
{{ promotionCode }}变量以动态显示用户输入的代码
- 主题路径:
2. 拦截异常替换消息(snippet失效时的备用方案)
如果snippet覆盖仍无效,可能是异常消息被硬编码,可通过事件订阅器拦截替换:
- 创建插件的事件订阅类:
use Shopware\Core\Framework\Event\ExceptionEvent; use Shopware\Core\Checkout\Promotion\Exception\PromotionNotFoundException; use Symfony\Component\EventDispatcher\EventSubscriberInterface; class PromotionExceptionSubscriber implements EventSubscriberInterface { public static function getSubscribedEvents(): array { return [ ExceptionEvent::class => 'onException', ]; } public function onException(ExceptionEvent $event): void { $exception = $event->getException(); if ($exception instanceof PromotionNotFoundException) { $customMessage = sprintf('促销代码 %s 无效,请确认后重试!', $exception->getPromotionCode()); $event->setException(new PromotionNotFoundException($exception->getPromotionCode(), $customMessage)); } } } - 在插件的
services.xml中注册该订阅器:<service id="YourPlugin\Subscriber\PromotionExceptionSubscriber"> <tag name="kernel.event_subscriber"/> </service>
3. 必做:清除缓存验证
修改完成后,必须清除Shopware缓存:
- 后台操作:进入「设置」→「系统」→「缓存管理」,点击清除缓存
- CLI命令:执行
bin/console cache:clear(需服务器终端权限) - 测试输入错误促销代码,确认提示已更新
内容的提问来源于stack exchange,提问作者Stepan
相关产品推荐
相关产品推荐

