У меня проблема с кодом ядра 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.
Я прошу прощения, если я не был достаточно ясен, моя голова уже кружится от этого.Я чувствую, что что-то очень очевидное я пропускаю, но я просто не могу понять, что это будет.