You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shopware管理面板激活App时脚本创建规则不生效问题

Shopware管理面板激活App时规则自动创建失效原因

该问题由不同运行上下文的权限规则、数据校验标准不一致导致,两个激活场景的核心差异如下:

  • 命令行执行bin/console app:activate MY_APP时,脚本运行在CLI上下文,默认跳过App权限校验、且数据写入层的格式校验容错性更高,因此编写的upsert逻辑可以正常执行,规则能成功生成。
  • 管理面板界面激活应用时,脚本运行在Administration的Web请求上下文,会触发两层拦截导致逻辑静默失败,且不会在前台抛出可见报错:
    1. 缺少必要的实体操作权限:没有在应用的manifest.xml配置文件中声明rule实体的创建/更新权限、payment_method实体的读取权限,Web上下文下App脚本的所有实体读写操作都会经过权限校验,无对应权限时操作会被直接拦截丢弃。
    2. 时间字段格式不符合校验要求:代码中手动给createdAt字段传入了Y/m/d H:i:s格式的时间,Web上下文下的API写入层要求时间字段必须使用ISO8601标准格式,格式不匹配会触发数据校验失败,中断整个写入流程。

修复方案

  1. 在应用的manifest.xml中补全所需的权限声明,配置示例:
<permissions>
    <create>rule</create>
    <update>rule</update>
    <read>payment_method</read>
</permissions>
  1. 调整Twig脚本逻辑,移除手动传入的非标准格式createdAt字段(Shopware写入层会在该字段缺失时自动填充当前系统时间,可完全避免格式兼容问题),修正后的代码如下:
{% do services.writer.upsert('rule', [
    {
        name: 'mycustomrule',
        priority: 0,
        conditions: [{
            type: 'paymentMethod',
            value: {
                paymentMethodIds: [paymentMethodRepository.findByCashPayment().id],
                operator: '!='
            }
        }]
    }
]) %}

特殊场景如果必须手动传入时间值,使用"now"|date("c")生成符合标准的ISO8601格式时间即可,不要自定义时间格式字符串。

内容的提问来源于stack exchange,提问作者Glancu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 23:15:11