Puan
33
Çözümler
0
1. MVC Nedir?
MVC, Model-View-Controller kelimelerinin baş harflerinden oluşan bir tasarım desenidir. Bu desen, uygulamaların mantıksal bölümler halinde ayrılmasını sağlar:
2. PHP ile MVC Yapısının Oluşturulması
İlk başta projemizin temel yapısını yapalım. Bir klasör yapısı yapmalıyız:
Kod:
my_mvc_app/
│
├── app/
│ ├── controllers/
│ ├── models/
│ ├── views/
│ └── core/
│ ├── App.php
│ └── Controller.php
│
├── public/
│ ├── index.php
│
├── .htaccess
├── composer.json
└── config.php
3. Model: Veri Yönetimi
Model sınıfı, veritabanı işlemlerini yönetir. Bir model sınıfı oluşturalım:
4. View: Görünüm Yönetimi
View sınıfı, kullanıcıya sunulan arayüzü yönetir. View dosyası oluşturalım:
Show.app
Create.php
Edit.php
5. Controller: İş Mantığı Yönetimi
Controller sınıfı, kullanıcı etkişimlerini ve iş mantığını yönetir. Controller oluşturalım:
6. Routing: URL Yönlendirmesi
URL yönlendirmesi, kullanıcı isteklerinin doğru controller ve metoda yönlendirmesini sağlar. 'App.php' dosyasını oluşturalım:
7. Uygulama Örneği
Örnekte, bir kullanıcının bilgilerini görüntüleyen, yeni kullanıcı oluşturan ve olan kullanıcıyı güncelleyen ve silen basit bir uygulama oluşturduk. 'public/index.php' dosyasını yapılandıralım.
'init.php' dosyası, tüm gerekli dosyaları ve sınıfları dahil eder.
8. Sonuç
PHP ile MVC mimarisini kullanarak daha yapılandırılmış ve sürdürülebilir web uygulamaları geliştirebilirsiniz. Bu rehberde, MVC'nin temellerinden başlayarak PHP ile nasıl uygulandığını detaylı bir şekilde inceledik. Geliştirme sürecinizde, MVC mimarisini kullanarak daha karmaşık projelere de adım atabilirsiniz.
MVC, Model-View-Controller kelimelerinin baş harflerinden oluşan bir tasarım desenidir. Bu desen, uygulamaların mantıksal bölümler halinde ayrılmasını sağlar:
- Model: Veritabanı işlemleri ve veri yönetiminden sorumludur.
- View: Kullanıcıya sunulan arayüzden sorumludur.
- Controller: İş mantığı ve kullanıcı etkileşimlerinden sorumludur.
2. PHP ile MVC Yapısının Oluşturulması
İlk başta projemizin temel yapısını yapalım. Bir klasör yapısı yapmalıyız:
Kod:
my_mvc_app/
│
├── app/
│ ├── controllers/
│ ├── models/
│ ├── views/
│ └── core/
│ ├── App.php
│ └── Controller.php
│
├── public/
│ ├── index.php
│
├── .htaccess
├── composer.json
└── config.php
3. Model: Veri Yönetimi
Model sınıfı, veritabanı işlemlerini yönetir. Bir model sınıfı oluşturalım:
PHP:
// app/models/User.php
class User {
private $db;
public function __construct() {
$this->db = new Database(); // Database bağlantısı yapılır
}
public function getUserById($id) {
$this->db->query("SELECT * FROM users WHERE id = :id");
$this->db->bind(":id", $id);
return $this->db->single();
}
public function createUser($name, $email, $password) {
$this->db->query("INSERT INTO users (name, email, password) VALUES (:name, :email, :password)");
$this->db->bind(":name", $name);
$this->db->bind(":email", $email);
$this->db->bind(":password", password_hash($password, PASSWORD_BCRYPT));
return $this->db->execute();
}
public function updateUser($id, $name, $email) {
$this->db->query("UPDATE users SET name = :name, email = :email WHERE id = :id");
$this->db->bind(":id", $id);
$this->db->bind(":name", $name);
$this->db->bind(":email", $email);
return $this->db->execute();
}
public function deleteUser($id) {
$this->db->query("DELETE FROM users WHERE id = :id");
$this->db->bind(":id", $id);
return $this->db->execute();
}
}
4. View: Görünüm Yönetimi
View sınıfı, kullanıcıya sunulan arayüzü yönetir. View dosyası oluşturalım:
Show.app
PHP:
<!-- app/views/users/show.php -->
<!DOCTYPE html>
<html>
<head>
<title>Kullanıcı Bilgileri</title>
</head>
<body>
<h1>Kullanıcı Bilgileri</h1>
<p>ID: <?= htmlspecialchars($user->id) ?></p>
<p>Ad: <?= htmlspecialchars($user->name) ?></p>
<p>Email: <?= htmlspecialchars($user->email) ?></p>
</body>
</html>
Create.php
PHP:
<!-- app/views/users/create.php -->
<!DOCTYPE html>
<html>
<head>
<title>Yeni Kullanıcı Oluştur</title>
</head>
<body>
<h1>Yeni Kullanıcı Oluştur</h1>
<form action="/users/store" method="post">
Ad: <input type="text" name="name"><br>
Email: <input type="text" name="email"><br>
Şifre: <input type="password" name="password"><br>
<input type="submit" value="Oluştur">
</form>
</body>
</html>
Edit.php
PHP:
<!-- app/views/users/edit.php -->
<!DOCTYPE html>
<html>
<head>
<title>Kullanıcı Güncelle</title>
</head>
<body>
<h1>Kullanıcı Güncelle</h1>
<form action="/users/update/<?= $user->id ?>" method="post">
Ad: <input type="text" name="name" value="<?= htmlspecialchars($user->name) ?>"><br>
Email: <input type="text" name="email" value="<?= htmlspecialchars($user->email) ?>"><br>
<input type="submit" value="Güncelle">
</form>
</body>
</html>
5. Controller: İş Mantığı Yönetimi
Controller sınıfı, kullanıcı etkişimlerini ve iş mantığını yönetir. Controller oluşturalım:
PHP:
// app/controllers/Users.php
class Users extends Controller {
public function show($id) {
$user = $this->model('User')->getUserById($id);
$this->view('users/show', ['user' => $user]);
}
public function create() {
$this->view('users/create');
}
public function store() {
$name = $_POST['name'];
$email = $_POST['email'];
$password = $_POST['password'];
$this->model('User')->createUser($name, $email, $password);
header('Location: /users');
}
public function edit($id) {
$user = $this->model('User')->getUserById($id);
$this->view('users/edit', ['user' => $user]);
}
public function update($id) {
$name = $_POST['name'];
$email = $_POST['email'];
$this->model('User')->updateUser($id, $name, $email);
header('Location: /users/show/' . $id);
}
public function delete($id) {
$this->model('User')->deleteUser($id);
header('Location: /users');
}
}
URL yönlendirmesi, kullanıcı isteklerinin doğru controller ve metoda yönlendirmesini sağlar. 'App.php' dosyasını oluşturalım:
PHP:
// app/core/App.php
class App {
protected $controller = 'home';
protected $method = 'index';
protected $params = [];
public function __construct() {
$url = $this->parseUrl();
if (file_exists('../app/controllers/' . $url[0] . '.php')) {
$this->controller = $url[0];
unset($url[0]);
}
require_once '../app/controllers/' . $this->controller . '.php';
$this->controller = new $this->controller;
if (isset($url[1])) {
if (method_exists($this->controller, $url[1])) {
$this->method = $url[1];
unset($url[1]);
}
}
$this->params = $url ? array_values($url) : [];
call_user_func_array([$this->controller, $this->method], $this->params);
}
public function parseUrl() {
if (isset($_GET['url'])) {
return explode('/', filter_var(rtrim($_GET['url'], '/'), FILTER_SANITIZE_URL));
}
}
}
7. Uygulama Örneği
Örnekte, bir kullanıcının bilgilerini görüntüleyen, yeni kullanıcı oluşturan ve olan kullanıcıyı güncelleyen ve silen basit bir uygulama oluşturduk. 'public/index.php' dosyasını yapılandıralım.
PHP:
// public/index.php
require_once '../app/init.php';
$app = new App();
'init.php' dosyası, tüm gerekli dosyaları ve sınıfları dahil eder.
PHP:
// app/init.php
require_once 'core/App.php';
require_once 'core/Controller.php';
require_once 'config.php';
// Autoload modelleri ve controller'ları yüklemek için
spl_autoload_register(function($class) {
if (file_exists('models/' . $class . '.php')) {
require_once 'models/' . $class . '.php';
} elseif (file_exists('controllers/' . $class . '.php')) {
require_once 'controllers/' . $class . '.php';
}
});
8. Sonuç
PHP ile MVC mimarisini kullanarak daha yapılandırılmış ve sürdürülebilir web uygulamaları geliştirebilirsiniz. Bu rehberde, MVC'nin temellerinden başlayarak PHP ile nasıl uygulandığını detaylı bir şekilde inceledik. Geliştirme sürecinizde, MVC mimarisini kullanarak daha karmaşık projelere de adım atabilirsiniz.
