actionValidateCustomerAddressFormAfter 在 Prestashop 的表单验证之前触发钩子

actionValidateCustomerAddressFormAfter triggers the hook before Prestashop's form validation

在我的 Prestashop 1.7 网站中,我有一个前端地址编辑表单(允许我的客户编辑其邮政地址)。我想在 Prestashop 确定用户输入的数据是否正确后执行挂钩(例如 邮政编码仅包含数字)。我认为这可以通过使用来完成:

$this->registerHook('actionValidateCustomerAddressFormAfter'); 除了: public function hookActionValidateCustomerAddressForm($data) { /* Here is the triggered hook */ }

但是即使用户提交了错误数据(例如 至少有一个字母的邮政编码),触发的钩子 hookActionValidateCustomerAddressForm 也会执行。

说明我的程序没有等待Prestashop的数据校验。

Prestashop判断数据是否正确后如何执行这个hook?

这个钩子在 validate() 函数中执行 CustomerAddessForm class:

public function validate()
{
    $is_valid = true;

    if (($postcode = $this->getField('postcode'))) {
        if ($postcode->isRequired()) {
            $country = $this->formatter->getCountry();
            if (!$country->checkZipCode($postcode->getValue())) {
                $postcode->addError($this->translator->trans(
                    'Invalid postcode - should look like "%zipcode%"',
                    array('%zipcode%' => $country->zip_code_format),
                    'Shop.Forms.Errors'
                ));
                $is_valid = false;
            }
        }
    }

    if (($hookReturn = Hook::exec('actionValidateCustomerAddressForm', array('form' => $this))) !== '') {
        $is_valid &= (bool) $hookReturn;
    }

    return $is_valid && parent::validate();
}

此挂钩始终执行(无论表单是否有效)并且 PrestaShop 不会向您发送 $is_valid 作为参数。因此,如果您想知道表单是否有效,您唯一可以做的就是执行与 PrestaShop 相同的验证。