Hi all, this is Adi again for a Laravel post. I recently found a lot of questions on StackOverflow asking what Laravel Resource controllers were. I wanted to explain this basic concept. Read on.

Laravel Resource Controller

Resource controllers are just Laravel controllers with all the methods to create, read, update and delete a resource (or a Model). You can create a resource controller with this artisan command

php artisan make:controller PhotoController --resource

This command will create a PhotoController.php in your controller directory and will have automatically created 7 methods index, show, create, store, edit, update, destroy. All these methods will be empty, you will have to fill them with the logic for each action. By default, when you execute the command, Laravel will use the model name from the controller, eg. Photo model will be used for PhotoController, if you want to use a different model you could use

php artisan make:controller PhotoController --resource --model=Photo

Now the new controller will you what you mention in the --model flag.

You could also create controllers for your API routes using the --api flag instead of --resource flag. This will create all the methods except the create and edit methods, as they are not required for an api call.

Laravel Resource Route

Laravel also provides an easy way to make routes for Resource controllers using

Route::resource('photos', 'PhotoController');
//  GET    /photos            PhotoController@index
//  GET    /photos/create     PhotoController@create
//  POST   /photos            PhotoController@store
//  GET    /photos/{id}       PhotoController@show
//  GET    /photos/{id}/edit  PhotoController@edit
//  PUT    /photos/{id}       PhotoController@update
//  DELETE /photos/{id}       PhotoController@destory

This method will create all the 7 routes needed to access each action from the browser. You could customize this to create only certain routes you need or leave what you don’t need like so.

Route::resource('photos', 'PhotoController')->only(['index', 'show']);

Route::resource('photos', 'PhotoController')->except(['create', 'store', 'update', 'destroy']);


I hope your doubts about what Laravel Resources controller have been cleared and may want to try this in your next project. Hope this small piece helped you understand them a little better.

For more information, you could look up the docs.

That’s all for now, this has been Adi.
If you are looking for a Freelance Web Developer you can contact me