Всем привет! Есть некий файл входа и выхода, пускай это будет
index.php
В нем мы определяем какой контроллер запустить а так же отдаем данные обратно пользователю с помощью общего класса
Response, который хранит в себе все, что нужно вернуть:
- Общие ошибки
- Ошибки ввода в поля
- Готовые данные которые нужно вернуть
Ошибки и данные в класс добавляются с помощью методов:
$Response->addErr("Сообщение", 455214); // сообщение и код ошибки нужен для фронтенда
$Response->addFieldErr("title", "Сообщение"); // название поля с ошибкой и сообщение об ошибке
$Response->addData("items", $posts_array); // json массив постов
$Response->addData("attachments", $attachments_array); // json массив вложений к постам
Ну а вконце
index.php просто выполняем функцию:
$Response->returnResponse();
Но вот проблема тут.
Например, нужно добавить комментарий к посту и действия кода следующие (мы отправили ID поста и текст комментария):
index.php вызывает контроллер
AddCommentInPost, контроллер вызывает:
- Модель PostModel, которая пытается получить пост, к которому мы добавляем комментарий для того, чтобы проверить существует ли такой пост
PostsModel->getPostById($_GET['id']);
- Метод модели CommentsModel, который валидирует входящие данные и добавляет комментарий в БД
- Если все хорошо, то модель CommentsModel возвращает объект комментария CommentEntity
Так вот... Что если при валидации произошла ошибка? Как мне вернуть поля с ошибками в контроллер AddCommentInPost? Ведь я не могу вызывать класс
Response из модели, т.к. модель не должна ничего знать о внешнем мире.
Но при такой задаче у меня еще есть идея.... например, чтобы
CommentsModel в случае любой ошибки отдавало
false, а класс
AddCommentInPost, видя, что пришел не объект а
false понимал, что произошла какая-то ошибка и уже с помощью метода
CommentsModel::getErrors() получал и обрабатывал массив с ошибками, которые сохранила в себе модель.
У нас получилось такое дерево:
index.php - AddCommentInPost - CommentsModel::getErrors()
И получается что все хорошо, т.к.
AddCommentInPost имеет связь с
Response и может записать туда ошибки.
НО ЧТО ЕСЛИ бы между
AddCommentInPost и
CommentsModel был еще один класс, как тогда передать ошибки из
CommentsModel в
AddCommentInPost?