we need to perform CRUD (Create, Read, Update, Delete) operations. Laravel makes this job easy for us. Just create a controller and Laravel will automatically provide all the methods for the CRUD operations. You can also register a single route for all the methods in routes.php file.
Example(1)
1. Create a controller called demoController by executing the following command.
php artisan make:controller demoController --resource
2 . Add the following code in app/Http/Controllers/demoController.php file. app/Http/Controllers /demo Controller.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\User;
class demoController extends Controller
{
public function index() {
return 'index';
}
public function create() {
return 'create';
}
public function store(Request $request) {
return 'store';
}
public function show($id) {
return 'show';
}
public function edit($id) {
return 'edit';
}
public function update(Request $request, $id) {
return 'update';
}
public function destroy($id) {
return 'destroy';
}
}
3. Add the following line of code in app/Http/routes.php file
app/Http/routes.php
Route::resource('demos','demoController');
Actions Handled By Resource Controller
Verb | URI | Action | Route Name |
---|---|---|---|
GET | /demos |
index | demos .index |
GET | /demos/create |
create | demos .create |
POST | /demos |
store | demos .store |
GET | /demos/{demo} |
show | demos .show |
GET | /demos/{demo}/edit |
edit | demos .edit |
PUT/PATCH | /demos/{demo} |
update | demos .update |
DELETE | /demos/{demo} |
destroy | demos .destroy |
Specifying The Resource Model
If you are using route model binding and would like the resource controller's methods to type-hint a model instance, you may use the --model
option when generating the controller:
php artisan make:controller demoController --resource --model=demo
Spoofing Form Methods
Since HTML forms can't make PUT
, PATCH
, or DELETE
requests, you will need to add a hidden _method
field to spoof these HTTP verbs. The @method
Blade directive can create this field for you:
<form action="/foo/bar" method="POST">
@method('PUT')
</form>