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 相同的验证。
在我的 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 相同的验证。