- When I say fat, I'm not talking about the FAT filesystem here - I mean long lines of code, methods, variables, etc. Basically, a fat script would be a big script.
Why should I make fat Models vs skinny Controllers?
- After developing for awhile, when you look back at your code you'll realize how hard it is to keep track of things. Basically, with a skinny controller (and meaningful function names) you can quickly see what's going on. When you have a controller with 300 lines of code, it can get pretty messy looking (even with proper formatting)...So to solve that problem, simply put many of your functions in your Models instead.
What type of functions should I put in my Model?
- The type of functions you should put in your model should be anything related to your model, or it's data. Formatting, Retrieving, Searching are just a few examples.
What type of functions should I put in my Controller?
- Usually, the only functions you should have in your controller are: Index, Add, Edit, View, Delete, and the "before" functions. Almost anything else can go in your model.
When I first started with CakePHP, I put almost everything in my controllers. In reality, the controllers should be extremely tiny - and only contain important business logic. As I worked with CakePHP more, I also learned to start putting more in my Models and less in my Controllers.
To put a function in your Model, you do it the exact same way as putting it in your controller:
To use the function, inside your controller use the following format:
function getEventDetails($_id) {
$params = array(
'conditions' => array(
'Event.id' => $_id,
),
);
return $this->find('first', $params);
}
$this->ModelName->functionName();
Here's an example:
After adding functions to your models, you can also access those functions using Model associations if they're set up correctly:
$eventDetails = $this->Event->getEventDetails($_id);
If you have a User Model and an Event Model that are associated,
you could put this in a method in your Users Controller:
$eventDetails = $this->User->Event->getEventDetails($_id);