Функция авторизации из контроллера:
// Авторизовать юзера с помощью электронной почты
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()
в модели мне не нравится, но чем заменить его не знаю, как обычно делают в таких случаях?
Ну и если любые другие замечания будут - рад услышать.