Przejdź do głównej zawartości

21. Wzorzec MVC w aplikacjach PHP

Wzorzec MVC w PHP

MVC (Model-View-Controller) to wzorzec architektoniczny rozdzielający aplikację na trzy warstwy: dane, logikę i prezentację. Jest podstawą większości frameworków PHP (Laravel, Symfony, CodeIgniter). Ta prezentacja wyjaśnia dlaczego warto go stosować nawet w małych projektach.

  1. Co to jest Model, View i Controller? — definicja każdej warstwy z przykładem PHP
  2. Dlaczego MVC? — porównanie z kodem „spaghetti” bez separacji
  3. Jak wygląda przepływ żądania? — ścieżka żądania przez trzy warstwy
  1. Problem bez wzorca: PHP z HTML i SQL w jednym pliku
  2. Definicja MVC — trzy warstwy i ich odpowiedzialności
  3. Model — klasa odpowiedzialna za dane i logikę biznesową
  4. View — pliki widoku renderujące HTML (bez logiki)
  5. Controller — łączy Model i View, obsługuje żądanie HTTP
  6. Przepływ żądania: URL → Controller → Model → View → Odpowiedź
  7. Korzyści: testowalność, czytelność, podział pracy w zespole

Schemat przepływu

Diagram: żądanie HTTP → Router → Controller → Model → View → HTML

Porównanie kodu

Przed MVC (kod spaghetti) vs Po MVC (trzy osobne pliki)

Minimum:

  • Definicja trzech warstw
  • Przykład prostego kontrolera i widoku w PHP
  • Schemat przepływu żądania

Forma: 10 slajdów, 10 minut

Ocena: 3.0

Kod bez MVC (spaghetti):

<?php
// index.php - wszystko w jednym pliku
$data = json_decode(file_get_contents('users.json'), true);
$filtered = array_filter($data, fn($u) => $u['active']);
?>
<html><body>
<?php foreach ($filtered as $user): ?>
<p><?= htmlspecialchars($user['name']) ?></p>
<?php endforeach; ?>
</body></html>

Model:

models/UserModel.php
<?php
class UserModel {
private string $file = 'data/users.json';
public function getActive(): array {
$data = json_decode(file_get_contents($this->file), true) ?? [];
return array_values(array_filter($data, fn($u) => $u['active']));
}
}

Controller:

controllers/UserController.php
<?php
class UserController {
public function index(): void {
$model = new UserModel();
$users = $model->getActive();
require 'views/users/index.php';
}
}

View:

views/users/index.php
<?php foreach ($users as $user): ?>
<p><?= htmlspecialchars($user['name']) ?></p>
<?php endforeach; ?>

Zacznij od problemu

Pokaż najpierw kod spaghetti — niech słuchacze poczują ból

Jeden slajd = jedna warstwa

Dedykuj osobny slajd Modelowi, Widokowi i Kontrolerowi