How to use Laravel 8 Controller?

The Controller is one main part of the Laravel MVC (Model View Controller) application structure. Let’s have a look at how the Laravel 8 controller work to use it efficiently.

Here are some examples why we use a Laravel 8 Controller Class.

  • Controller makes use of the Request object and then reads the relevant data it needs
  • Controller can do validation of data from an incoming Request
  • Controller don’t need to implement all business logic inside it, instead you may call a service (a Controller function) that runs your business logic and returns data
  • Once your service will return appropriate data you can pass this data to your view blade

Consider the diagram below:

In some cases you don’t need to run business logic. In such cases pass the required data for the view to Laravel blade view directly.

Consider the simple controller example below.


namespace App\Http\Controllers;

use Illuminate\Contracts\Foundation\Application;
use App\Http\Requests\CartItemStoreRequest;
use App\Http\Service\ShoppingCartService;
use Illuminate\Contracts\View\Factory;
use Illuminate\Contracts\View\View;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;

class ShoppingCartController extends Controller
     * @param Request $request
     * @return Application|Factory|View
    public function list(Request $request)
        return view('cart');

     * @param CartItemStoreRequest $request
     * @param ShoppingCartService $service
     * @return JsonResponse
    public function store(CartItemStoreRequest $request, ShoppingCartService $service): JsonResponse
        // Retrieve the validated input data...
        $validatedData = $request->validated();

        // your service handle business logic
        $cartItem = $service->addItem($validatedData);

        // passing data to view
        return response()->json([
            'item' => $cartItem->getItem()


  • The list method above looks pretty simple. We don’t need any validation or run a business logic.
  • Let us go through the ShoppingCartController@store method in detail
    • It first uses the validate method to confirm if the input fields are in the specified formats.
    • When a request is validated you can move forward to save that data
    • Now, you have a separate service which enables you to inject data in your Laravel controller using DI concept
    • You may now run your business logic in that service and get data that you need
    • Finally, pass this data to your view and show your data in Laravel blade view

Benefits using the above strategy

The above strategy gives you the following benefits.

  • A clean looking controller
  • Code is decoupled and easier unit testing
  • Your service runs your business logic

Leave a Comment