Bird
Raised Fist0
Laravelframework~5 mins

MVC architecture in Laravel

Choose your learning style10 modes available
Introduction

MVC helps organize your code by separating data, user interface, and control logic. Laravel uses MVC to keep your app clean and easy to manage.

Building a web app that needs clear separation between data and views.
Working on a team where different people handle data, design, and logic.
Creating apps that will grow and need easy maintenance.
Wanting to reuse code parts like views or data models.
Needing to test parts of your app separately.
Syntax
Laravel
Model: app/Models/Example.php
Controller: app/Http/Controllers/ExampleController.php
View: resources/views/example.blade.php

Route: routes/web.php

// Basic flow:
Route::get('/example', [ExampleController::class, 'index']);

class ExampleController extends Controller {
    public function index() {
        $data = Example::all();
        return view('example', ['data' => $data]);
    }
}

Models handle data and database.

Controllers handle user requests and app logic.

Views show the user interface using Blade templates.

Examples
This model represents the 'products' table in the database.
Laravel
<?php
// Model example
namespace App\Models;
use Illuminate\Database\Eloquent\Model;

class Product extends Model {
    // Laravel assumes 'products' table
}
This controller fetches all products and sends them to a view.
Laravel
<?php
// Controller example
namespace App\Http\Controllers;
use App\Models\Product;

class ProductController extends Controller {
    public function showAll() {
        $products = Product::all();
        return view('products.index', ['products' => $products]);
    }
}
This view lists all product names using Blade syntax.
Laravel
<!-- View example: resources/views/products/index.blade.php -->
<ul>
@foreach ($products as $product)
    <li>{{ $product->name }}</li>
@endforeach
</ul>
Sample Program

This example shows a simple Laravel MVC setup. The route calls the TaskController's index method. The controller gets all tasks from the Task model and passes them to the view. The view lists all task titles.

Laravel
<?php
// routes/web.php
use App\Http\Controllers\TaskController;

Route::get('/tasks', [TaskController::class, 'index']);

// app/Models/Task.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;

class Task extends Model {
    // Laravel uses 'tasks' table by default
}

// app/Http/Controllers/TaskController.php
namespace App\Http\Controllers;
use App\Models\Task;

class TaskController extends Controller {
    public function index() {
        $tasks = Task::all();
        return view('tasks.index', ['tasks' => $tasks]);
    }
}

// resources/views/tasks/index.blade.php
<ul>
@foreach ($tasks as $task)
    <li>{{ $task->title }}</li>
@endforeach
</ul>
OutputSuccess
Important Notes

Laravel automatically links models to database tables by naming convention.

Blade templates help keep HTML clean and safe.

Use routes to connect URLs to controller actions.

Summary

MVC splits your app into Model (data), View (UI), and Controller (logic).

Laravel follows MVC to keep code organized and easy to maintain.

Use routes to connect user requests to controllers, which use models and views.

Practice

(1/5)
1. In Laravel's MVC architecture, which component is responsible for handling user input and application logic?
easy
A. Controller
B. Model
C. View
D. Route

Solution

  1. Step 1: Understand MVC roles

    Model handles data, View handles UI, Controller handles logic and user input.
  2. Step 2: Identify the component for logic

    Controller processes requests, applies logic, and returns responses.
  3. Final Answer:

    Controller -> Option A
  4. Quick Check:

    Logic and input handling = Controller [OK]
Hint: Controller = logic and input handler in MVC [OK]
Common Mistakes:
  • Confusing Model with Controller
  • Thinking View handles logic
  • Assuming Route handles logic
2. Which of the following is the correct way to define a route that calls the show method of UserController in Laravel?
easy
A. Route::get('/user/{id}', [UserController, 'show']);
B. Route::get('/user/{id}', 'show@UserController');
C. Route::get('/user/{id}', function() { UserController@show(); });
D. Route::get('/user/{id}', 'UserController@show');

Solution

  1. Step 1: Recall Laravel route syntax

    Routes use Route::get('uri', 'Controller@method') format for controller methods.
  2. Step 2: Match correct syntax

    Route::get('/user/{id}', 'UserController@show'); matches this pattern exactly; others have syntax errors or wrong order.
  3. Final Answer:

    Route::get('/user/{id}', 'UserController@show'); -> Option D
  4. Quick Check:

    Correct route syntax = Route::get('/user/{id}', 'UserController@show'); [OK]
Hint: Use 'Controller@method' string in routes [OK]
Common Mistakes:
  • Using array without quotes
  • Swapping controller and method order
  • Using anonymous function incorrectly
3. Given this Laravel controller method, what will be the output when accessing /welcome route?
public function welcome() {
    $name = 'Alice';
    return view('greeting', ['name' => $name]);
}

Assuming the greeting.blade.php view contains:
<h1>Hello, {{ $name }}!</h1>
medium
A. Error: Undefined variable $name
B.

Hello, Alice!

C.

Hello, $name!

D.

Hello, !

Solution

  1. Step 1: Understand data passing to view

    The controller passes ['name' => 'Alice'] to the view as variable $name.
  2. Step 2: Interpret Blade template output

    The view uses {{ $name }} which outputs 'Alice' safely inside <h1> tags.
  3. Final Answer:

    <h1>Hello, Alice!</h1> -> Option B
  4. Quick Check:

    Passed variable rendered correctly = <h1>Hello, Alice!</h1> [OK]
Hint: Variables passed to view appear as {{ $variable }} [OK]
Common Mistakes:
  • Expecting raw variable name output
  • Confusing PHP variable syntax inside Blade
  • Assuming missing variable error
4. Identify the error in this Laravel controller method:
public function index() {
    $users = User::all;
    return view('users.index', compact('users'));
}
medium
A. Missing parentheses after all() method
B. Incorrect view name syntax
C. compact() should be replaced with array()
D. User model not imported

Solution

  1. Step 1: Check method call syntax

    User::all is a method and requires parentheses: User::all() to fetch all users.
  2. Step 2: Verify other parts

    View name and compact usage are correct; import is assumed correct or handled by namespace.
  3. Final Answer:

    Missing parentheses after all() method -> Option A
  4. Quick Check:

    Method calls need () = Missing parentheses after all() method [OK]
Hint: Remember to add () when calling methods [OK]
Common Mistakes:
  • Forgetting parentheses on method calls
  • Misusing compact() function
  • Assuming view name syntax error
5. You want to display a list of products with their categories in a Laravel app using MVC. Which approach correctly follows MVC principles?
hard
A. Use Controller only to render HTML, fetching done in View
B. Write SQL queries directly in the View to get products and categories
C. Fetch products and categories in Controller, pass to View, and display there
D. Put all fetching and HTML rendering inside the Model

Solution

  1. Step 1: Recall MVC responsibilities

    Model handles data, Controller handles logic and data fetching, View handles display.
  2. Step 2: Evaluate options

    Fetch products and categories in Controller, pass to View, and display there correctly fetches data in Controller and passes it to View for display, following MVC.
  3. Final Answer:

    Fetch products and categories in Controller, pass to View, and display there -> Option C
  4. Quick Check:

    Controller fetches, View displays = Fetch products and categories in Controller, pass to View, and display there [OK]
Hint: Controller fetches data; View only displays it [OK]
Common Mistakes:
  • Putting SQL in Views
  • Mixing data logic in Models with display
  • Letting Views fetch data
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard