Scott Fink
Scott Fink

Reputation: 217

Should you handle session data in a controller or a model for an MVC framework?

I am working with an MVC framework (specifically, PHP's CodeIgniter). I am trying to follow "best practices" as much as possible, but I don't have much experience with MVC. Is it bad practice for me to retrieve data from a session within the Controller? Should I "ask" the model if, say, a particular session value is 'foo' or 'bar', or should I do that directly inside the Controller? I'm thinking I should do it inside the Model since the session data is technically data, but I just want to make sure. To be clear, I don't store the session data in the database at all, so I'm not running a query.

Upvotes: 4

Views: 3040

Answers (1)

Nathaniel Ford
Nathaniel Ford

Reputation: 21239

Models typically handle all domain objects that are persisted to some sort of long-term storage. They may or may not have transient values in them that have to do with the particular application's use of them.

Controllers should be querying any data they need in order to correctly route and display information. It may help to create a 'Service' layer that operates directly on domain objects (your model) and provides an API for Controllers to use. The main thing to not include in Controllers is business logic.

It would be reasonable, for instance, for the Controller to grab the referring page and do something with that data in regards to the user flow. However, apart from validation, it probably shouldn't, say, examine the amount of money being transferred between accounts - it should just pass that on to a service object that instantiates and works with the correct domain objects.

Questions to ask about logic you're putting into a Controller:

  • Does this logic help figure out what Model objects I need? If not, it shouldn't be here.
  • Does this logic help figure out what View objects will be used to construct the response to the user? If not, it shouldn't be here.

Upvotes: 2

Related Questions