
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.
Eğer her şey doğru çalışıyorsa, Kullanıcılar listesi ekranda görünmelidir.
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:
GENEL
/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:
APACHE
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.
PHP
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
<?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
<?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
<?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.
PHP
<!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:
GENEL
http://localhost/mvc_project/public/home
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()
vefilter_input()
ile temizleyin. - 🔹 Error Handling: Hata yönetimi için
try-catch
bloklarını ve özel hata sayfalarını kullanın.
Benzer Yazılar

PHP ile Veritabanı Güvenliği
0 Yorumlar
Yorumlar ()
Henüz yorum yok. İlk yorum yapan sen ol!