Bloating codes in single place would be devastating. It would be tons of duplication and unreadable codes which give your code maintainer a headache 😅.
So, i would cover how i go with Slim Controller and Fat Model
Skinny Controller basically means move all business logic, database logic and non response related logic to somewhere else and leave the controller clean and neat.
Fat Model basically means put only database related logic in the model instead of controller and make it as reusable method.
Don’t get me wrong. Fat Model doesn’t actually fat. I would prefer less fat than bloated model
There are some approach to implement this
Move Business Login In Repository
As mention in a lot of articles, repository pattern works as a bridge between models and controllers. If you don’t want to cluttered your model and controller with tons of business logic, using repository should be good enough. For more info, you can refer here
Most of repository pattern use interface to create methods. But i prefer to create a class as a base class. Why? i don’t want to repeat same query all over again to all repository. Here is sample of my base class
From this BaseRepository class, i only need to pass a Model in constructor. Let’s create UserRepository
and since Laravel already have Automatic Injection, in Controller, we just put at constructor.