Introduction to MVC
Understanding the Model-View-Controller pattern
Introduction to MVC Architecture
The Model-View-Controller (MVC) pattern is the backbone of modern web applications. It separates your application into three interconnected components.
💡 Ginto AI Native Support
Ginto AI natively supports MVC architecture, making it easy to generate Models, Controllers, and Views with proper patterns.
Why MVC Matters
- Separation of Concerns: Each component has a single responsibility
- Maintainability: Easier to update and debug
- Testability: Components can be tested independently
- Scalability: Teams can work on different parts simultaneously
The Three Components
📊 Model
Represents your data and business logic. Handles database operations, validation, and data transformations.
🖼️ View
Responsible for presentation. Displays data to users and handles the user interface.
🎮 Controller
Acts as the intermediary. Receives user input, processes it, and determines which Model and View to use.
How MVC Flow Works
┌─────────────┐ Request ┌──────────────┐
│ │ ───────────────► │ │
│ Browser │ │ Controller │
│ │ ◄─────────────── │ │
└─────────────┘ Response └──────┬───────┘
│
┌──────────────┼──────────────┐
│ │ │
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ Model │ │ View │ │ Service │
│ (Data) │ │ (HTML) │ │ (Logic) │
└─────────┘ └─────────┘ └─────────┘
Quick Start: Your First MVC Request
Let's trace a simple request through an MVC application:
// 1. User visits: https://yourapp.com/users/123
// 2. Router matches the URL pattern
$router->get('/users/{id}', [UserController::class, 'show']);
// 3. Controller receives the request
class UserController {
public function show($id) {
// 4. Model fetches data
$user = $this->userModel->find($id);
// 5. View renders the response
return view('users/show', ['user' => $user]);
}
}
Real-World Example: Blog Application
// Model: src/Models/Post.php
class Post {
public function getPublished(): array {
return $this->db->select('posts', '*', [
'status' => 'published',
'ORDER' => ['created_at' => 'DESC']
]);
}
}
// Controller: src/Controllers/BlogController.php
class BlogController {
public function index() {
$posts = $this->postModel->getPublished();
return view('blog/index', compact('posts'));
}
}
// View: src/Views/blog/index.php
<?php foreach ($posts as $post): ?>
<article>
<h2><?= htmlspecialchars($post['title']) ?></h2>
<p><?= htmlspecialchars($post['excerpt']) ?></p>
</article>
<?php endforeach; ?>
MVC vs Other Patterns
| Pattern | Best For | Complexity |
|---|---|---|
| MVC | Web applications, APIs | Medium |
| MVP | Desktop/Mobile apps | Medium |
| MVVM | Data-binding UIs | High |
Useful Resources
🚀 Next Steps
In the next lesson, you'll learn how to organize your MVC project structure for maximum maintainability and scalability.