Здравствуйте. Столкнулся с проблемой, решить которую не могу решить и вообще понять почему она произошла.
Структура:
UserActivationService.php<?php
namespace Models\Users;
use Services\Db;
class UserActivationService{
private const TABLE_NAME = 'users_activation_codes';
public static function createActivationCode(User $user): string{
$code = bin2hex(random_bytes(16));
$db = Db::getInstance();
$db->query(
'INSERT INTO ' . self::TABLE_NAME . ' (user_id, code) VALUES (:user_id, :code)',
[
'user_id' => $user->getId(),
'code' => $code
]
);
return $code;
}
public static function checkActivationCode(User $user, string $code): bool{
$db = Db::getInstance();
$result = $db->query(
'SELECT * FROM ' . self::TABLE_NAME . ' WHERE user_id = :user_id AND code = :code',
[
'user_id' => $user->getId(),
'code' => $code
]
);
return !empty($result);
}
}
?>
EmailSender.php<?php
namespace Services;
use Models\Users\User;
class EmailSender{
public static function send(
User $receiver,
string $subject,
string $templateName,
array $templateVars = []
): void {
extract($templateVars);
ob_start();
require __DIR__ . '/../templates/mail/' . $templateName;
$body = ob_get_contents();
ob_end_clean();
mail($receiver->getEmail(), $subject, $body, 'Content-Type: text/html; charset=UTF-8');
}
}
?>
UsersController.php<?php
namespace Controllers;
use View\View;
use Models\Users\User;
use Exceptions\InvalidArgumentException;
use Models\Users\UserActivationService;
use Services\EmailSender;
class UsersController{
private $view;
public function __construct(){
$this->view = new View(__DIR__ . '/../templates');
}
public function signUp(){
if (!empty($_POST)) {
try {
$user = User::signUp($_POST);
} catch (InvalidArgumentException $e) {
$this->view->renderHtml('users/signUp.php', ['error' => $e->getMessage()]);
return;
}
if ($user instanceof User) {
$code = UserActivationService::createActivationCode($user);
EmailSender::send($user, 'Активация', 'userActivation.php', [
'userId' => $user->getId(),
'code' => $code
]);
$this->view->renderHtml('users/signUpSuccessful.php');
return;
}
}
$this->view->renderHtml('users/signUp.php');
}
}
?>
Это основные файлы.
Скриншот ошибки прикрепляю. На сколько я понял, не может быть найден метод, но почему? Путь
require __DIR__ . '/../templates/mail/' . $templateName;
сразу скажу что правильный, запись в бд добавляется, но само письмо на почту не отправляется.
Заранее спасибо за любые идеи.