Взаимодействие контроллера и модели? Функция авторизации из контроллера:// Авторизовать юзера с помощью электронной почты 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() в модели мне не нравится, но чем заменить его не знаю, как обычно делают в таких случаях? Ну и если любые другие замечания будут - рад услышать.
Не рекомендуется именовать методы одинаково в контроллере и модели, чтобы избежать путаницы. Лучше назвать методы соответственно контексту, например, mailloginController() в контроллере и mailloginModel() в модели.
В данном случае, когда успешная авторизация происходит в модели, можно вернуть какое-то значение (например, true), чтобы контроллер мог обработать это значение и выполнить необходимые действия (например, редирект). Это поможет разделить логику авторизации и действия, которые должны быть выполнены после нее.
Для оптимизации кода и избегания повторения создания экземпляра объекта можно создать его заранее и передавать по необходимости в функции или методы. Также можно использовать Dependency Injection для передачи объектов в конструкторы классов, чтобы избежать создания их внутри методов.
Вместо использования функции die() в модели, рекомендуется возвращать какое-то значение (например, сообщение об ошибке) и обрабатывать его в контроллере. Можно также выбросить исключение и обработать его в контроллере.
Не рекомендуется именовать методы одинаково в контроллере и модели, чтобы избежать путаницы. Лучше назвать методы соответственно контексту, например, mailloginController() в контроллере и mailloginModel() в модели.
В данном случае, когда успешная авторизация происходит в модели, можно вернуть какое-то значение (например, true), чтобы контроллер мог обработать это значение и выполнить необходимые действия (например, редирект). Это поможет разделить логику авторизации и действия, которые должны быть выполнены после нее.
Для оптимизации кода и избегания повторения создания экземпляра объекта можно создать его заранее и передавать по необходимости в функции или методы. Также можно использовать Dependency Injection для передачи объектов в конструкторы классов, чтобы избежать создания их внутри методов.
Вместо использования функции die() в модели, рекомендуется возвращать какое-то значение (например, сообщение об ошибке) и обрабатывать его в контроллере. Можно также выбросить исключение и обработать его в контроллере.