Здравствуйте! Прошу сильно не бить меня. Я новичок в Laravel. До этого с фреймворками не имел дела вообще. Первое представление о нем я конечно получил. Самую простую основу более менее понимаю. Но не понимаю одного. Где хранить логику, бизнес логику? (Для меня логика и бизнес логика - это алгоритм который берет данные и пишет их в бд попутно возможно что то с ними делая иногда. ну и не только пишет ну и вытаскивает и т.д. Да я скорее всего не прав)
Начитался статей, видео и т.д. Везде одни противоречия, что решить не могу как правильно более менее делать. Проект не самый простой (интернет магазин), поэтому в контроллерах писать мне кажется не стоит. А где все таки писать логику? Обращения к БД и т.д., чтобы это было не очень трудно к пониманию. В моделях? мне кажется нет. Я тут нарыл возможность делать все через сервисы, сервис контейнеры, сервис провайдер. Там методы прописывать ну что то типо выбрать все из базы, сохранить и т.д. И там все держать. А в контроллере просто обращаться к этим методам. Про репозитории почитал посмотрел. Не хочу о них думать. Мозг расплавился от них.
Что я нарыл я хочу спросить нормальная ли это структура приложения или колхоз? Можно ли так делать не будет больших проблем от такого? пс поддерживать приложение в основном буду я сам, но хочу, чтобы все было более менее правильно.
Оно будет развиваться со временем, поэтому не хотелось бы получить граблями по лбу через некоторое время.
ВОТ ПРИМЕР КОДА
один сервис провайдер. В него пихать все например или можно сделать несколько
class SaveStrServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->singleton('App\Helpers\Contracts\SaveStr','App\Helpers\SelectUsers');
}
}
вот контракт их например сделать несколько по названиям моделей например грубо говоря
namespace App\Helpers\Contracts ;
use Illuminate\Http\Request;
interface SaveStr {
public static function select($type);
public static function selectuser($id);
public static function selectpurchase($id);
}
вот класс исполнитель, который привязан к контракту(их тоже можно разделить несколько сделать в зависимости от действий. Ну например чтобы разделить область ответственности)
namespace App\Helpers;
use App\Helpers\Contracts\SaveStr;
use App\Order;
use App\Good;
use App\User;
use App\Purchase;
use App\Status_order;
use App\Status_purchase;
use App\Page;
class SelectUsers implements SaveStr {
public static function select($type) {
$pages = Page::where('type','=', $type)->get();
return $pages;
}
public static function selectuser($id) {
$users = User::with(['orders.purchase','orders.status_order','orders','orders.goods','orders.purchase.status_purchase'])->where('id','=',$id)->get();
return $users;
}
public static function selectpurchase($id) {
$purchases = Purchase::with(['orders','orders.status_order','orders.goods','status_purchase','orders.user'])->where('id','=',$id)->get();
return $purchases;
}
}
ну а вот контроллер
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Helpers\Contracts\SaveStr;
use App\Order;
use App\Good;
use App\User;
use App\Purchase;
use App\Status_order;
use App\Status_purchase;
use App\Admin_role;
use App\Admin;
use App\Banner;
use App\Category;
use App\City;
use App\Point;
use App\User_role;
use App\Page;
class TestController extends Controller
{
public function index(SaveStr $saveStr)
{
$purchase = $saveStr->selectpurchase(2);
dump($purchase);
}
}
Это только пример и вопрос можно ли так делать? Можно ли все там прописывать? Все обращения к бд и другую логику. А в контроллере использовать методы оттуда и уже передавать коллекцию во вьюху. Нормально ли это будет или вообще колхоз глубокий?
Ну или все таки объясните попроще мне как все таки делать, чтобы потом самому не запутаться в этом всем. Тот вариант, что я описал мне кажется простым к пониманию. Но вот так ли это на самом деле? Я уже не знаю что делать и как начинать.
ЗАРАНЕЕ СПАСИБО ЗА ВАШИ ОТВЕТЫ!!