IwanQ
@IwanQ
Плохие времена часто дают прекрасные возможности

Проблема при попытке отправить письмо?

Здравствуйте. Столкнулся с проблемой, решить которую не могу решить и вообще понять почему она произошла.

Структура:

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;
сразу скажу что правильный, запись в бд добавляется, но само письмо на почту не отправляется.

Заранее спасибо за любые идеи.

5daef00b94a00369344483.jpeg
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
glaphire
@glaphire Куратор тега PHP
PHP developer
Автор, вы написали так много кода с стремлением к ООП, но ответ же в самой ошибке белым по черному - нет такого метода в классе User. Если взять и посмотреть файл и строчку, то видно:
mail($receiver->getEmail(), $subject, $body, 'Content-Type: text/html; charset=UTF-8');

Оформляйте код по PSR-4 - сейчас код сливается в одно целое из-за плохого форматирования
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
не могу понять почему она произошла.

Для этого следует прочитать сообщение об ошибке.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
24 апр. 2024, в 09:14
5000 руб./за проект
24 апр. 2024, в 09:13
2000 руб./в час