0 будет проверять, сколько секунд прошло с момента создания модели * * @see EmailActivation::compareTime() * @return bool */ public function canRepeat(): bool { return $this->compareTime($this->repeatTimeout); } /** * Истёк ли срок кода? * Для проверки используется значение EmailActivation::$expirationTimeout и интерпретируется как: * - <0 означает, что код никогда не истечёт * - =0 всегда будет говорить, что код истёк * - >0 будет проверять, сколько секунд прошло с момента создания модели * * @see EmailActivation::compareTime() * @return bool */ public function isExpired(): bool { return $this->compareTime($this->expirationTimeout); } /** * Вычисляет, во сколько можно будет выполнить повторную отправку кода * * @return int */ public function canRepeatIn(): int { return $this->calculateTime($this->repeatTimeout); } /** * Вычисляет, во сколько код истечёт * * @return int */ public function expireIn(): int { return $this->calculateTime($this->expirationTimeout); } protected function compareTime(int $value): bool { if ($value < 0) { return false; } if ($value === 0) { return true; } return time() > $this->calculateTime($value); } protected function calculateTime(int $value): int { return $this->owner->created_at + $value; } }