@verygoodboy

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

Есть 2 однометодных контроллера с похожим кодом:
NewPostUpdate и OldPostUpdate. Эти контроллеры работают с одной моделью Post. Эти контроллеры принимают параметром $request и $id.

Логик у них похожа - в зависимости от даты полученной из формы, в контроллерах обновляется информация полученная из формы.
Например:

public function __invoke(Request $request, $id)
{
$data = $request->all();
$newPost = Post::where('id', $id)->firstOrFail();

if($data['date_time'] > now()){
 // обновляем модель
// создаем связанную модель для названия файла
// сохраняем полученный файл
} elseif ($data['date_time'] < now()){
 // обновляем модель
// создаем связанную модель для названия файла
// сохраняем полученный файл
} else {
 // обновляем модель
// создаем связанную модель для названия файла
// сохраняем полученный файл
}
return redirect()->back()->with('success', 'Saved');
}

Фактически этот код дублируется в обеих контроллерах.

Подскажите, пожалуйста, можно ли как то вынести этот код за пределы этих контроллеров, передать параметром туда провалидированные из request данные и $id Post, сохранить там данные и вернуть обратно ответ?

Если можно, то куда правильнее было бы перенести этот код (модель Post, или action...), и каким должен быть ответ выполнения этой функции (как его обработать в контроллере)?
  • Вопрос задан
  • 100 просмотров
Пригласить эксперта
Ответы на вопрос 2
vanton
@vanton
Человек и пароход
Вариантов много:
Можно сделать базовый контроллер с кодом, а в этих двух его наследовать
Можно сделать отдельный Action и запускать его из контроллеров
Подробнее можно посмотреть тут, всё достаточно хорошо описано
Ответ написан
@jazzus
Можно без этих извращений с контроллерами. Один ресурсный PostController с методом update, где первым параметром реквест, вторым Post.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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