Nasim Redoy

Web Developer

Freelancer

Nasim Redoy

Web Developer

Freelancer

Blog Post

Laravel 8 Resource Controller & Routing Tutorial

August 17, 2021 Laravel
Laravel 8 Resource Controller & Routing  Tutorial
885 Views

     Today,I will explain you how to create resource route in laravel 8. we will show laravel 8 resource routing example.laravel resource routing assigns the typical “CRUD” routes to a controller with a single line of code.

for example, you may wish to create a controller that handles all http requests for “languages” stored by your application. using the make:controller artisan command, you can quickly create such a controller.

You have to create resource routes on laravel they provide insert, update, view, delete routes and second, you have to create a resource controller that will provide method for insert, update, view, and delete.

Here,I will generate a controller at app/Http/Controllers/LanguageController.php. The controller will contain a method for each of the available resource operations.So, in this example, we will see how to create resource route and how they work.

we have to understand why we choose the resource route instead of a different route. we always declare different routes for our “CRUD”application like as bellow:

use App\Http\Controllers\LanguageController;

Route::get('blogs', '[LanguageController::class, 'index']');

Route::get('blogs/create', '[LanguageController::class, 'create']');

Route::post('blogs', '[LanguageController::class, 'store']');

Route::get('blogs/{blog}/edit', '[LanguageController::class, 'edit']');

Route::put('blogs/{blog}', '[LanguageController::class, 'update']');

Route::get('blogs/{blog}', '[LanguageController::class, 'show']');

Route::delete('blogs/{blog}', '[LanguageController::class, 'destroy']');

As you can see above route declare, we have to create six routes for our crud application module. But we can simply create those six routes by using bellow resource route:

Here, you may register a resourceful route to the controller:

Resource Route:

routes/web.php

use App\Http\Controllers\LanguageController;
Route::resource('languages', LanguageController::class);

Now, you can run bellow command and check create route lists:

php artisan route:list --name=languages

Now we have output as like bellow created route:

+--------+-----------+-------------------+---------------+---------------------------------------------+--------------+--------------+
| Domain | Method    | URI                       | Name             | Action                                          | Middleware   |
+--------+-----------+-------------------+---------------+---------------------------------------------+--------------+
|        | GET|HEAD  | api/user                  |                  | Closure                                         | api,auth:api |
|        | GET|HEAD  | languages                 | language.index   | App\Http\Controllers\LanguageController@index   | web          |
|        | POST      | languages                 | language.store   | App\Http\Controllers\LanguageController@store   | web          |
|        | GET|HEAD  | languages/create          | language.create  | App\Http\Controllers\LanguageController@create  | web          |
|        | GET|HEAD  | languages/{language}      | language.show    | App\Http\Controllers\LanguageController@show    | web          |
|        | PUT|PATCH | languages/{language}      | language.update  | App\Http\Controllers\LanguageController@update  | web          |
|        | DELETE    | languages/{language}      | language.destroy | App\Http\Controllers\LanguageController@destroy | web          |
|        | GET|HEAD  | languages/{language}/edit | language.edit    | App\Http\Controllers\LanguageController@edit    | web          |
+--------+-----------+-------------------+---------------+---------------------------------------------+--------------+--------------+

I will make:controller Artisan command, we can quickly create such a controller:

Resource Controller Command:

php artisan make:controller LanguageController --resource

Here you can see your BlogController with following resource method, So let’s open and see.

app/Http/Controllers/LanguageController.php

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Models\Language;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;

class LanguageController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function index()
    {

        try {
          
            $language = Language:: ->get();
            return response()->json([
                'success'=>true,
                'Language' => $language

            ],400);
        }catch (\Exception $exception){
            return response()->json([
                'success'=>false,
                'message' => $exception->getMessage(),
            ],404);
        }


    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\JsonResponse
     */
    public function store(Request $request)
    {
        try {
            $language  = new Language();
            $language -> language = $request -> name;
            $language -> level = $request -> level;
            return response()->json([
                'success'=>true,
                'Message'=> 'Language Added Successfully',
         ],400);
        }catch (\Exception $exception){
            return response()->json([
                'success'=>false,
                'message' => $exception->getMessage(),
            ],404);
        }
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\JsonResponse
     */
    public function edit($id)
    {
        try {
            $language = Language::where('id',$id)
                ->select('languages.language as lanName','languages.level as lanLevel')
                ->first();

            return response()->json([
                'success'=>true,
                'Edit Language' => $language

            ],400);
        }catch (\Exception $exception){
            return response()->json([
                'success'=>false,
                'message' => $exception->getMessage(),
            ],404);
        }
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\JsonResponse
     */
    public function update(Request $request, $id)
    {
        try {
            $lan = Language::find($id);
            $lan -> language = $request -> name;
            $lan -> level = $request -> level;
            $lan -> save();
            return response()->json([
                'success'=>true,
                'Message'=> 'Language Updated Successfully',
                'data' =>$data

            ],400);
        }catch (\Exception $exception){
            return response()->json([
                'success'=>false,
                'message' => $exception->getMessage(),
            ],404);
        }
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\JsonResponse
     */
    public function destroy($id)
    {
        try {
            Language::find($id)->delete();
            return response()->json([
                'success'=>true,
                'Message'=> 'Language Delete Successfully',
            ],400);
        }catch (\Exception $exception){
            return response()->json([
                'success'=>false,
                'message' => $exception->getMessage(),
            ],404);
        }
    }
}

this way you can simply use resource route and controller, make quick crud module for your project.

I hope  It Will help you  &  if you face any problem then you can also CONTACT me also  & also you can follow Laravel Official Document 

Taggs:
Write a comment