如何使用actionValidateCustomerAddressForm钩子获取客户地址信息
actionValidateCustomerAddressForm 钩子使用说明
1. 基础用法:获取客户地址信息
actionValidateCustomerAddressForm 是 PrestaShop 内核在地址表单提交后的验证阶段触发的专用钩子,你可以直接通过钩子回调的表单对象获取所有提交的地址字段:
- 第一步:在自定义模块的
install方法中注册钩子
public function install() { return parent::install() && $this->registerHook('actionValidateCustomerAddressForm'); }
- 第二步:编写钩子回调方法,直接获取地址数据
public function hookActionValidateCustomerAddressForm($params) { // 获取提交的表单对象 $addressForm = $params['form']; // 拿到所有提交的地址信息 $addressData = $addressForm->getData(); // 常用地址字段直接读取即可 $firstName = $addressData['firstname']; $lastName = $addressData['lastname']; $mobile = $addressData['phone'] ?? $addressData['phone_mobile']; $detailedAddress = $addressData['address1']; $postcode = $addressData['postcode']; $city = $addressData['city']; $countryId = $addressData['id_country']; }
如果需要在这一步做字段合法性校验,直接调用表单的 addError 方法即可中断后续提交流程,错误信息会自动展示给用户:
// 示例:校验手机号格式 if (!preg_match('/^1[3-9]\d{9}$/', $mobile)) { $addressForm->addError('请输入正确的中国大陆手机号'); }
2. 地址更新阶段的具体使用
地址更新场景下,该钩子的触发时机为:用户提交地址编辑表单后、内核执行原有地址数据覆盖写入之前,你可以按以下逻辑实现业务需求:
- 区分新增/更新场景:通过表单数据里的
id_address字段判断,值大于0即为更新操作 - 可以读取原有地址数据和新提交的地址做对比,实现变更日志记录、重复地址校验等需求
示例代码如下:
public function hookActionValidateCustomerAddressForm($params) { $addressForm = $params['form']; $newAddressData = $addressForm->getData(); $addressId = (int)$newAddressData['id_address']; // 判断当前为地址更新操作 if ($addressId > 0) { // 读取原有地址数据 $oldAddress = new Address($addressId); // 示例1:记录地址变更日志 if ($oldAddress->address1 != $newAddressData['address1']) { // 你的自定义日志逻辑 } // 示例2:限制用户修改关联的国家字段 if ($oldAddress->id_country != $newAddressData['id_country']) { $addressForm->addError('地址关联国家不允许修改'); } } }
内容的提问来源于stack exchange,提问作者GOURAV GUPTA
相关产品推荐
相关产品推荐

