Ниже я изменил реализацию с учётом ваших желаний. Простая реализация с привязкой к сессии. Кроме того добавил немного кода модели.
$cart = Cart::bySession($session_id)
->firstOrCreate(['session' => $session_id]);
Бизнесу нужны быстрые решения. Для этого нужно искать золотую середину, а не быть снобом.
Роутинг, работа с БД, да и все остальное останется.
Нет никаких готовых решений для построения сложных Enterprise приложенийЕсть Фреймворки, которые декомпозируют задачу разработки сложных модульных приложений на составные части. Так же знают о специфике веб-приложений и представляют абстракции для того, что бы нивелировать сложности веб-специфики (сделать прозрачным её).
Ок, предлагает, был не прав. Но не обязывает и делать этого не следует.
По-моему можно сделать как угодно, как раз Laravel позволяет делать все, что угодно, вклиниваясь в любую часть работы.
Фреймворк остается самим собой, просто не используется часть его функций
Т.е. фреймворк расширяется и изменяется согласно требованиям разрабатываемого приложения.
Еще раз, не предлагаю я ВСЕ выбросить, просто утверждаю, что некоторые вещи, особенно фасады, надо выбросить.
Проблема Laravel в рамках темы обсуждения в том, что в документации нет информации о том, где хранить логику,
Instead of defining all of your request handling logic as Closures in route files, you may wish to organize this behavior using Controller classes. Controllers can group related request handling logic into a single class. Controllers are stored in the app/Http/Controllers directory.
просто не надо утверждать, что этот вопрос, как и любой другой нерешаем в рамках фреймворка.
«Фреймворк» отличается от понятия библиотеки тем, что библиотека может быть использована в программном продукте просто как набор подпрограмм близкой функциональности, не влияя на архитектуру программного продукта и не накладывая на неё никаких ограничений. В то время как «фреймворк» диктует правила построения архитектуры приложения, задавая на начальном этапе разработки поведение по умолчанию — «каркас», который нужно будет расширять и изменять, согласно указанным требованиям.
Другим ключевым отличием «фреймворка» от библиотеки может быть инверсия управления: пользовательский код вызывает функции библиотеки (или классы) и получает управление после вызова. Во «фреймворке», пользовательский код может реализовывать конкретное поведение, встраиваемое в более общий — «абстрактный» код фреймворка. При этом, «фреймворк» вызывает функции (классы) пользовательского кода
конечно от этого всего,
контроллер максимально простой
zugo в своем ответе написал описал проблематику
оффтопят, предлагая другие инструменты.