Где лучше всего добавлять дополнительные данные к запросу?

Есть потребность указывать статус поста (на модерации или опубликован) в зависимости от роли пользователя, который этот материал размещает или обновляет. Но возникает проблема с пониманием, где именно добавлять данные к запросу. У меня есть несколько вариантов:

1. Создать middleware и к текущему request добавлять post_status, который считается исходя из роли пользователя.
2. Использовать метод в своем кастомном Request: prepareForValidation().
3. Менять в обсервере (самый плохой вариант).

Какой из этих вариатов стоит использовать, какие дополнительные варианты есть, потому что не всегда нужно будет прикреплять к запросу какое-то вычисляемое свойство?

Подводные камни, которые сбивают с толку: в случае с мидлваром, на каждый добавляемый элемент к запросу, мне придется писать свой мидлвар (например прикрепление статуса поста, прикрепление ip комментатора к комментарию, прикрепление user_id и тд).

В случае со своим Request, я могу прикреплять те данные, которые мне потребуются ИМЕННО для этого запроса, например StorePostRequest, UpdatePostRequest и так далее, но не уверен что с логической точки зрения нормально добавлять какие-то данные к запросу в превалидации (в документации описывается изменение каких-то уже существующих полей в запросе).

В случае с обсервами все вообще плохо, потому что модель одна, и например если админ захочет обновить запись, но не менять ей статус (опубликовано или на модерации) скрипт будет все равно присваивать свой статус в зависимости от роли пользователя, и для админа записи всегда будут публиковаться, а не оставаться на модерации.
  • Вопрос задан
  • 92 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Kostik_1993
Fullstack Web Developer | PHP | Laravel | Vue.js
Ни обсервер, ни запрос тут вообще не нужны.
В вашем случае всеми данными управляет бизнес логика в том месте где она выполняется. Если опустить все принципы разработки, то условным местом выполнения будет метод контроллера. Ну или тот бизнесовый класс который он вызовет, что более правильно. Представляю работать с кодом после вас, захожу я, прописываю тот статус который требуется в новой задаче, а он все равно ставится какой-то иной и начинаю я искать, а куда же его изменение засунул Алексей Скляров
Ответ написан
JhaoDa
@JhaoDa
LaravelRUS Team
Представляем себе ситуацию, что в проекте потребуется возможность создать пост консольной командой (не шибко реалистично, но всё же) — внезапно, вариант №3 остаётся единственным.

Правда, желательно использовать не обсерверы (они, в целом, не очень для логики, чем её больше, тем больше они начинают напоминать макаронного монстра), а какие-то сервисные классы, которые будут содержать в себе всю необходимую логику для создания поста, раз она сложнее простейшего CRUD'а.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы