🧩 17. MVC Architecture (PHP)

🔹 What is MVC?

MVC = Model + View + Controller

It is a design pattern used to organize code into 3 parts:

1️⃣ Model (Data Layer)

  • Handles database & business logic
  • Fetches, inserts, updates data
  • Example:
class UserModel {
public function getUsers() {
// fetch data from database
}
}

2️⃣ View (UI Layer)

  • Responsible for frontend / UI
  • Displays data to user
  • Example:
<h1>Welcome <?= $name ?></h1>

3️⃣ Controller (Logic Layer)

  • Connects Model + View
  • Handles user request
  • Example:
class UserController {
public function index() {
$model = new UserModel();
$data = $model->getUsers();
include 'views/users.php';
}
}

🔄 How MVC Works (Flow)

  1. User opens URL → /users
  2. Request goes to Controller
  3. Controller calls Model
  4. Model fetches data from DB
  5. Controller sends data to View
  6. View shows result to user

👉 Simple Flow:

User → Controller → Model → Controller → View → User

📁 Folder Structure (Basic MVC in PHP)

/project

├── /app
│ ├── /controllers
│ │ └── UserController.php
│ │
│ ├── /models
│ │ └── UserModel.php
│ │
│ └── /views
│ └── users.php

├── /core
│ └── Router.php

├── /config
│ └── database.php

├── /public
│ └── index.php (Entry point)

└── .htaccess

🛠️ Basic MVC Project (Simple Example)

📍 1. public/index.php (Entry Point)

require_once '../app/controllers/UserController.php';$controller = new UserController();
$controller->index();

📍 2. Controller (UserController.php)

require_once '../app/models/UserModel.php';class UserController {
public function index() {
$model = new UserModel();
$users = $model->getUsers(); require '../app/views/users.php';
}
}

📍 3. Model (UserModel.php)

class UserModel {
public function getUsers() {
return [
['name' => 'Aditya'],
['name' => 'Rahul']
];
}
}

📍 4. View (users.php)

<h2>User List</h2><ul>
<?php foreach($users as $user): ?>
<li><?= $user['name'] ?></li>
<?php endforeach; ?>
</ul>

🔥 Why Use MVC?

✔ Clean code
✔ Easy to maintain
✔ Scalable projects
✔ Team-friendly (frontend + backend separation)


⚡ Pro Tips (Real-World Use)

  • Use Router for clean URLs (/users, /products)
  • Add Database connection class
  • Use autoloading (PSR-4) instead of manual require
  • Use frameworks like:
    • Laravel (Best for MVC in PHP)
    • CodeIgniter (Lightweight)

🚀 Simple Summary

PartWork
ModelData + Database
ViewUI / Design
ControllerLogic + Flow Control