Функция проверки электронной почты из другого класса, кажется, возвращает неправильное значение - PullRequest
0 голосов
/ 21 декабря 2018

У меня проблема с кодом ядра Prestashop, который, похоже, разрушает мой день, я явно упускаю что-то тривиальное за последние несколько часов.Итак, вот сделка:

У меня есть метод класса, который будет проверять поля из всех видов форм.В моем случае это все о форме клиента с электронной почтой, которая всегда указывается как недопустимый формат.

Это вызовет другой метод (ограничение $) из другого класса (Проверка) для каждого поля, чтобыпроверьте, все ли в порядке с этим полем.

Так как моя проблема связана с проверкой формата электронной почты, я добавил эти строки к нему до того, как он выполнит проверку, чтобы я мог получить вывод, чтобы предупредить меня, будет ли оно работать или нет:

if ($constraint=='isEmail') 
{
    print 'Check for validating '.PHP_EOL;
    print Validate::$constraint($field->getValue())?'is valid ':'not valid '.PHP_EOL;
}

Я также добавил в раздел еще одну строку, которая будет срабатывать только в случае неудачной проверки поля:

if ($constraint=='isEmail') 
{
    print 'failed '.PHP_EOL;
}

Вот полный метод в его нынешнем виде:

abstract class AbstractFormCore implements FormInterface
{
    public function validate()
    {
        foreach ($this->formFields as $field) {
            if ($field->isRequired() && !$field->getValue()) {
                $field->addError(
                    $this->constraintTranslator->translate('required')
                );
                continue;
            } elseif (!$field->isRequired() && !$field->getValue()) {
                continue;
            }

            foreach ($field->getConstraints() as $constraint) {
                if ($constraint=='isEmail') 
                {
                    print 'Check for validating '.PHP_EOL;
                    print Validate::$constraint($field->getValue())?'is valid ':'not valid '.PHP_EOL;
                }
                if (!Validate::$constraint($field->getValue())) {
                    if ($constraint=='isEmail') 
                    {
                        print 'failed '.PHP_EOL;
                    }
                    $field->addError(
                        $this->constraintTranslator->translate($constraint)
                    );
                }
            }
        }
        exit;
        return !$this->hasErrors();
    }
}

Что касается функции ограничения, вот ее источник:

class ValidateCore
{
    public static function isEmail($email)
    {
        print 'validating '.$email.' '.PHP_EOL;
        return true;
        return (!empty($email) && preg_match(Tools::cleanNonUnicodeSupport('/^[a-z\p{L}0-9!#$%&\'*+\/=?^`{}|~_-]+[.a-z\p{L}0-9!#$%&\'*+\/=?^`{}|~_-]*@[a-z\p{L}0-9]+(?:[.]?[_a-z\p{L}0-9-])*\.[a-z\p{L}0-9]+$/ui'), $email));
    }
}

Вы заметите, что я изменил его, добавив строку вывода, а также вернув значение true независимо отпараметр.

Таким образом, при этой настройке, когда сценарий проверяет электронную почту, я ожидаю следующий вывод:

«Проверка на проверку» (запускается функцией Validate ()на, потому что он достиг поля с ограничением isEmail в первый раз)«validating email@email.com» (вызвано функцией isEmail, чтобы сообщить мне, что эта функция запущена)«действителен» (запускается функцией Validate (), потому что функция isEmail () всегда возвращает true)«validating email@email.com» (запускается isEmail, который второй раз запускается Validate ())

Вместо этого я получаю следующий вывод

validation email @ email.комПроверить для проверкипроверка адреса электронной почты@email.comнедействительныйпроверка адреса электронной почты@email.comошибка

Итак, функция isEmail () запускается один раз, но я не думаю, что это актуально.Затем «Проверка для проверки», очевидно, отправляется на выход, как и ожидалось.Затем я получаю сообщение «validating ...», сообщающее, что isEmail был запущен.И затем, по какой-то причине, Validate :: $ constraint ($ field-> getValue ())? 'Is valid': 'not valid' .PHP_EOL строка будет выводить "not valid".Затем я получаю «неудачный» вывод, что неудивительно.

Я просто не могу понять, как эта строка будет выводить «недействительно», так как я убедился, что функция ограничения isEmail () всегда будет возвращать true.

Я прошу прощения, если я не был достаточно ясен, моя голова уже кружится от этого.Я чувствую, что что-то очень очевидное я пропускаю, но я просто не могу понять, что это будет.

1 Ответ

0 голосов
/ 21 декабря 2018

Обновление: похоже, проблема была полностью в другом месте.Кто-то другой переписал функцию «isEmail», используя встроенный механизм перезаписи Prestashop, и его поведение было совершенно другим.

...