PrestaShop 1.7 无法通过Webservice更新订单自定义字段求助
解决方案及核心排查路径
字段定义校验
- 先确认你重写的Order类中
$definition数组里的自定义字段配置完整,布尔类型必须绑定验证规则,Webservice更新逻辑会跳过无合法验证规则的字段,配置示例:
'is_your_custom_field' => [ 'type' => self::TYPE_BOOL, 'validate' => 'isBool', 'allow_null' => false, 'default' => 0 ],
Webservice参数配置补全
GET请求正常但PUT失效,90%的原因是webserviceParameters里没有显式声明字段的setter属性,就算你不需要自定义写入逻辑也要补全配置,示例:
// 重写的Order类构造方法中补全配置 public function __construct($id = null, $id_lang = null, $id_shop = null) { parent::__construct($id, $id_lang, $id_shop); $this->webserviceParameters['fields']['is_your_custom_field'] = [ 'getter' => 'getYourCustomField', // 你之前已配置的GET用getter 'setter' => 'setYourCustomField', // 新增setter声明,PUT才会识别为可写字段 'xlink_resource' => null ]; } // 对应新增setter方法,无特殊逻辑直接赋值即可 public function setYourCustomField($value) { $this->is_your_custom_field = (bool)$value; }
核心代码排查路径
以上配置补全后仍失效,可按以下路径定位问题:
- 查看
classes/webservice/WebserviceRequest.php的saveEntityFromXml()方法,打印$updatedFields数组,确认你的自定义字段有没有被纳入待更新列表 - 查看同文件的
validateObjectField()方法,检查字段值是否通过了isBool规则验证,传值为字符串型true/false可正常兼容,传其他格式会被直接过滤 - 检查是否有其他第三方模块重写了Order类的
update()方法,导致自定义字段没有被加入到最终执行的UPDATE语句字段列表中
内容的提问来源于stack exchange,提问作者Matteo Rossi
相关产品推荐
相关产品推荐

