My new way and correct way of coding Controllers

I have been using frameworks for a number of years with the Yii2 framework being my framework of choice at the present time. When it comes to defining how an application should be structured in terms of Controllers and their methods i was always one to put methods wherever I felt it made sense to put one.

For example my UserController would consist of index, view, create, update, delete, login, logout, lostpassword methods. This made sense at the time. Any action methods that relate to user functionality could go in the UserController. However all the time I was doing this I was aware that some developers and articles on the internet point to the fact that Controllers should only have certain methods within them, namely the standard CRUD methods and nothing else.

So one day I decided to follow that train of thought and start writing my controllers to only have the following methods, index, view, create, update, delete. These methods serve the following purpose …

  1. Index – view all records in a grid view
  2. View – view single record in a detail view
  3. Create – create form and submission code for single record
  4. Update – update form and submission code for single record
  5. Delete – delete a single record

I am aware that I could even get rid of the index and just handle the “view all” and “view single record” through the single Controller method of “view” by checking to see whether an ID parameter has been provided to the method however I thought I would keep them separate.

I am quite pleased by how the new structure has turned out in that it makes my Controller less bulky with code and it gives a much more structured neat and clean feeling to my code and software application.

So you might be wondering what happened to my UserController and the extra methods that where described earlier i.e. login, logout, lostpassword etc. Well using the new system they can be broken down as follows …

UserController

  1. Index – view all users in the system
  2. View – view single users details
  3. Create – create a user
  4. Update – update a user
  5. Delete – delete a user

LoginController

  1. Create – log the user in
  2. Delete – log the user out

LostPasswordController

  1. Create – send the user a link to change the users password
  2. Update – process the clicked link and change the users password

So it is possible to do this, basically the Controllers within the software application now take more definition by having the Controllers named after the type of event the user is wanting to make within the software application and placing less emphasis on the Controllers methods providing the definition. I really like my new way of coding my Controllers and I intent to stick to this method for the foreseeable future.