Web uygulamalarında kod düzenini korumak ve sürdürülebilirliği artırmak için MVC (Model-View-Controller) mimarisi kullanılır. MVC, uygulamayı Model (Veri Yönetimi), View (Arayüz), Controller (İş Mantığı) olmak üzere üç katmana ayırarak kodun daha okunabilir ve yönetilebilir olmasını sağlar.
Şimdi PHP ile basit bir MVC yapısını oluşturalım ve bu işin nasıl yapıldığını basit bir örnekle öğrenelim. Router, Controller, Model ve View katmanlarını oluşturarak bir web uygulamasının temel iskeletini çıkaralım. Gerçek dünyada bu yapı daha karmaşık olabilir, ancak temel mantık Model, View ve Controller ayrımına dayanır.
1. MVC Yapısının Avantajları
✅ Kod Düzeni: Mantık, veri ve arayüz bileşenlerini ayırarak daha düzenli kod yapısı sağlar.
✅ Yeniden Kullanılabilirlik: Birden fazla sayfada kullanılabilecek bileşenler oluşturabilirsiniz.
✅ Geliştirilebilirlik: Kodları ayrı bileşenlere ayırarak yeni özellikler eklemeyi kolaylaştırır.
✅ Bakım Kolaylığı: Bir bileşeni değiştirdiğinizde diğerlerini etkilemeden güncelleyebilirsiniz.
✅ Test Edilebilirlik: Farklı bileşenler ayrı test edilebilir.
2. MVC Klasör Yapısı
MVC mimarisine uygun bir dizin yapısı oluşturalım:
/mvc_project
|-- app
| |-- controllers
| | |-- HomeController.php
| |-- models
| | |-- User.php
| |-- views
| | |-- home.php
|-- public
| |-- index.php
|-- core
| |-- Router.php
|-- config
| |-- config.php
|-- .htaccess
.htaccess
dosyası ile tüm istekleri public/index.php
dosyasına yönlendirebiliriz:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ public/index.php?url=$1 [QSA,L]
3. MVC Yapısını Kodlamak
3.1. Ana Giriş Dosyası (public/index.php)
Tüm isteklerin yönlendirildiği ana dosyadır.
require_once '../core/Router.php';
$router = new Router();
$router->run();
3.2. Router Sınıfı (core/Router.php)
Bu sınıf gelen istekleri ilgili Controller’a yönlendirir.
<?php
class Router {
public function run() {
$url = isset($_GET['url']) ? rtrim($_GET['url'], '/') : 'home';
$controllerName = ucfirst($url) . 'Controller';
$controllerFile = "../app/controllers/" . $controllerName . ".php";
if (file_exists($controllerFile)) {
require_once $controllerFile;
$controller = new $controllerName();
$controller->index();
} else {
http_response_code(404);
echo "404 - Sayfa bulunamadı";
}
}
}
3.3. Controller Yapısı (app/controllers/HomeController.php)
Controller, gelen istekleri işler ve uygun Model ile View’ı kullanır.
<?php
class HomeController {
public function index() {
require_once "../app/models/User.php";
$user = new User();
$data = $user->getUsers();
require_once "../app/views/home.php";
}
}
3.4. Model Yapısı (app/models/User.php)
Model, veritabanı işlemlerini yönetir.
<?php
class User {
private $db;
public function __construct() {
$this->db = new PDO("mysql:host=localhost;dbname=mvc_project", "root", "");
}
public function getUsers() {
$stmt = $this->db->query("SELECT id, name FROM users");
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
}
3.5. View Yapısı (app/views/home.php)
View, kullanıcıya gösterilecek arayüzü oluşturur.
<!DOCTYPE html>
<html>
<head>
<title>Home</title>
</head>
<body>
<h1>Kullanıcılar</h1>
<ul>
<?php foreach ($data as $user) { ?>
<li><?php echo htmlspecialchars($user['name']); ?></li>
<?php } ?>
</ul>
</body>
</html>
4. MVC’yi Çalıştırma
Web tarayıcınızda aşağıdaki URL’yi ziyaret ederek projeyi test edebilirsiniz:
http://localhost/mvc_project/public/home
Eğer her şey doğru çalışıyorsa, Kullanıcılar listesi ekranda görünmelidir.
5. Güvenlik ve Geliştirme İpuçları
🔹 Veritabanı Bağlantısı: PDO kullanarak güvenli ve dinamik veritabanı bağlantıları oluşturun.
🔹 ORM Kullanımı: Eloquent veya Doctrine gibi ORM yapıları ile modeli daha güçlü hale getirin.
🔹 CSRF Koruması: Form işlemlerinde CSRF token kullanarak güvenliği artırın.
🔹 Yönlendirme Geliştirme: Daha esnek ve RESTful API uyumlu bir yönlendirme sistemi ekleyin.
🔹 Input Sanitization: Kullanıcıdan gelen verileri htmlspecialchars()
ve filter_input()
ile temizleyin.
🔹 Error Handling: Hata yönetimi için try-catch
bloklarını ve özel hata sayfalarını kullanın.
Yorum gönder