Взаимодействие контроллера и модели? Функция авторизации из контроллера:// Авторизовать юзера с помощью электронной почты
public function maillogin()
{
$POST = $_POST;
$POST['mail'] = trim($POST['mail']);
$validate = new Validator();
if(!empty($_POST['mail']) && !empty($_POST['pwd']) && $validate->correctMail($_POST['mail']) === true){
// В модель ничего не передаётся т.к. она возьмёт данные из POST
$data = $this->userModel->{__FUNCTION__}();
if($data === 'WrongPassword'){
$view = new ErrorView();
$view->wrongPwd();
}
elseif($data === 'WrongLogin') {
$view = new ErrorView();
$view->wrongLogin();
}
} else {
$view = new ErrorView();
$view->noData();
}
}
Фрагмент этой же функции из модели:if(password_verify($POST['pwd'], $pwd[0]['pwd'])){
$_SESSION['ok'] = 'Вы успешно авторизованы';
header("Location: {$_SERVER['HTTP_REFERER']}");
die();
}
Вопросы по этому коду:1. Метод maillogin() существует и в контроллере и в модели, нормально ли это, или лучше сделать mailloginController() и mailloginModel()2. Если пользователь залогинится успешно, то метод в модели как видно не возвращает true, там же в модели создаётся сессия и юзер отправляется на страницу откуда пришёл. Это плохо? Надо вернуть true и редиректить в контроллере?3. Создав экземпляр класса new ErrorView() заранее, например, там же где new Validator() я смогу сократить код ниже, а не писать создание экземпляра в каждом if но если всё пройдёт ок, то он потребуется и это будет напрасная трата памяти. Как лучше делать в этом случае?4. die() в модели мне не нравится, но чем заменить его не знаю, как обычно делают в таких случаях?
Ну и если любые другие замечания будут - рад услышать.

21 Авг 2019 в 06:59
197 +1
1
Ответы
1

Не рекомендуется именовать методы одинаково в контроллере и модели, чтобы избежать путаницы. Лучше назвать методы соответственно контексту, например, mailloginController() в контроллере и mailloginModel() в модели.

В данном случае, когда успешная авторизация происходит в модели, можно вернуть какое-то значение (например, true), чтобы контроллер мог обработать это значение и выполнить необходимые действия (например, редирект). Это поможет разделить логику авторизации и действия, которые должны быть выполнены после нее.

Для оптимизации кода и избегания повторения создания экземпляра объекта можно создать его заранее и передавать по необходимости в функции или методы. Также можно использовать Dependency Injection для передачи объектов в конструкторы классов, чтобы избежать создания их внутри методов.

Вместо использования функции die() в модели, рекомендуется возвращать какое-то значение (например, сообщение об ошибке) и обрабатывать его в контроллере. Можно также выбросить исключение и обработать его в контроллере.

20 Апр в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 654 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир