PHP MVC: наилучшая практика и правильный путь для ошибки проверки данных печати - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть система регистрации Php, использующая структуру MVC.Для проверки данных базы данных я создаю LoginModel.Мне нужно вывести ошибку об ошибке на view, например: User Not Exist Сейчас. Какой путь лучше и лучше:

1 - Добавить проверку данных об ошибках в Login Model и войти в Controller и печать на View Как это:

class LoginModel extends \App\Core\Model
{
    public function login($user_name, $user_password, $set_remember_me_cookie = null)
    {
        $returnError = array();

            // checks if user exists, if login is not blocked (due to failed logins) and if password fits the hash
            $result = $this->validateAndGetUser($user_name, $user_password);

            // check if that user exists. 
            if (!$result) {
               $returnError['isMessage'] = false;
               $returnError['name'] = "User Not Found";
            }

        return $returnError;
    }
    private function validateAndGetUser($user_name, $user_password){
      //Check User Data Validation
    }
}

2 - Добавить только True Или False в LoginModel и Получить в Controller И Set Имя ошибки и Печать в View Как это:

class LoginModel extends \App\Core\Model
{
    public function login($user_name, $user_password, $set_remember_me_cookie = null)
    {

            // checks if user exists, if login is not blocked (due to failed logins) and if password fits the hash
            $result = $this->validateAndGetUser($user_name, $user_password);

            // check if that user exists. 
            if (!$result) {
                return false;
            }

        return true;
    }
    private function validateAndGetUser($user_name, $user_password){
      //Check User Data Validation
    }
}

В действии мой действительно вопрос: могу ли я добавить сообщение об ошибке в Model и войти в Controller ?!Какой путь правильный и верный?

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

Предложение:

Разделите функциональность входа в систему на два (основных) шага:

  • Проверьте, существует ли уже опубликованный пользователь.Если нет, сгенерирует исключение .
  • Сопоставьте опубликованный пароль с сохраненным.Если они не совпадают, выдает исключение .Я предлагаю использовать password_hash для хранения паролей и password_verify для сопоставления пароля с сохраненным.

Затем - в зависимости от вашей текущей архитектуры, в вашем контроллере используйте блок try-catch , чтобы перехватить исключение, генерируемое шагами входа в систему, и продолжить, как вы хотите, чтобы отобразить сообщение об исключении для пользователя.: В случае ajax-запроса вы отправите определенный заголовок ответа (например, с кодом состояния 500) или пользовательский заголовок ответа (например, с кодом статуса 420) обратно клиенту, например браузеру, для активации функции error запроса ajax.

Примечания:

  • Доменная модель представляет собой слой .И он не должен знать о внешнем мире.
  • Контроллер должен только (!) обновить модель домена (через services ).
  • Представление должно быть классом - не файлом шаблона - отвечает за выборку данных со слоя модели (через services ), подготовка / форматирование для представления и передачи его объекту ответа , чтобы его можно было вернуть и напечатать.
  • Контроллер и представление (в основном отношение 1: 1) должныбыть создан отдельно .Контроллер не должен иметь никаких знаний о представлении.Этот этап создания будет выполняться в классе или файле фронт-контроллера.
  • Что касается отчетов об ошибках, я бы рекомендовал прочитать this .
0 голосов
/ 23 сентября 2018

Есть много способов сделать это.Для меня лучший способ - это первый предложенный вами способ, но лучше объявлять отчеты об ошибках в одном файле, например errors.php, и заставить модель возвращать вам массив с 2 ключами, первый ключ всегда TRUE или FALSE, а затем, если ваша модельвозвращает первый ключ FALSE читает номер ошибки из второго ключа.Затем в контроллере вы можете заменить номер ошибки соответствующим ключом в массиве, который вы объявили в errors.php. Если первый ключ равен TRUE, то второй ключ будет вашей пользовательской информацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...