actionValidateCustomerAddressFormAfter запускает ловушку перед проверкой формы Prestashop - PullRequest
0 голосов
/ 27 февраля 2020

На моем веб-сайте Prestashop 1.7 у меня есть форма редактирования внешнего адреса (позволяющая моему клиенту редактировать свои почтовые адреса). Я хочу выполнить перехват после того, как Prestashop решил, что введенные пользователем данные верны или нет ( например почтовый индекс содержит только цифры). Я думал, что это можно сделать, используя:

$this->registerHook('actionValidateCustomerAddressFormAfter'); в дополнение к: public function hookActionValidateCustomerAddressForm($data) { /* Here is the triggered hook */ }

Но сработавший хук hookActionValidateCustomerAddressForm выполняется, даже когда пользователь отправляет неверные данные ( Например, почтовый индекс, по крайней мере, с одной буквой).

Это означает, что моя программа не ожидает проверки данных Prestashop.

Как выполнить этот хук после того, как Prestashop решит если данные верны?

1 Ответ

1 голос
/ 27 февраля 2020

Этот хук выполняется в функции validate() из CustomerAddessForm класса:

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, если вы хотите узнать, действительна ли форма.

...