İlk olarak index.php miz olacak. Bu sayfa ilk çağrılan sayfamız olduğu gibi controller sınıfından nesnenin oluştuğu sayfadır. Daha sonra Controller altında simpleController.php bulunmakta. Bu da bizim mini çalışmamızın controller sınıfını barındıran dosya. Diğer models ve views de aynı şekilde.
Olayı biraz daha detaylandıracak olursak hemen işe simpleModel.php den başlayalım. Amaç veri oluşturmak ve bu verinin istenilen ihtiyaca göre gönderilmesini sağlamak. Diğer bir anlamda data access layer görevi üstlenmekte. Ancak burada model diye anıyoruz. Bu örnekte ki modelimizde DB bağlantısı oluşturmak yerine bir dizi eleman kullandım.
class simpleModel {
private $data;
function __construct() {
$this->data = array(
array(0, "Ahmet", "112"),
array(1, "Mehmet", "155")
);
}
function getData() {
return $this->data;
}
function getItem($index) {
return $this->data[$index];
}
}
?>
Yukarıda görüldüğü gibi bir data verisine oluşturma esnasında iki satırlık veri ekledim ve iki fonksiyonla bunları geri döndürdüm. getData ile verileri komple geri döndürürken getItem ile sadece index değerine göre satır geri döndüren fonksiyon. Mantık basit bir liste ve bir detay.
class simpleListView {
function __construct($data) {
for ($i=0; $i
}
}
}
?>
Burada da listeleme view sınıfı. Bu sınıfta oluşturulma aşamasında aldığı verileri döngü ile bir div içerisinde listeliyor. Bir link aracılığıyla da idx adında bir query string oluşturmayı sağlıyor. Bu query stringi daha sonra detay sayfasında kullanacağız. Modelimizin ilk sütununda bulunan index değeri, diğeri ise adı. Telefonu detay sayfasında göstereceğimiz için burada o yok.
class simpleDetailView {
function __construct($data) {
echo "
" . $data[1] . " - " . $data[2] . "
";
}
}
?>
Burada ise detay gösteren view sınıfımız var. Bakın data buraya model sayfasında ki get item den geldiği için tek satır olarak geliyor. Modelimizde ki getItem'i incelerseniz indexle ana dizinin bir elemanını çekmiştik. Gelen değeri ekrana bir div içerisinde yazıyor. Evet gelen datanın 2. olanı telefon numarası.
include 'Models/simpleModel.php';
include 'Views/simpleDetailView.php';
include 'Views/simpleListView.php';
class simpleController {
function __construct() {
$model = new simpleModel();
if (isset($_GET["idx"])) {
$view = new simpleDetailView(
$model->getItem($_GET["idx"]));
} else {
$view = new simpleListView(
$model->getData());
}
}
}
?>
Controller sınıfımızda ise bize gerekli olan model ve viewlerin dosyalarını include etmemiz gerekiyor. Daha sonra controller oluştuğunda ise GET ile gelen idx değeri varmı diye bakıyoruz. Bu değer varsa bizim detay sayfasına gitmemiz gerekiyor. Zaten bu değer listeleme sayfasında ki html kodlarından üretilmekte yani oradan geliyor demek. idx değeri varsa simpleDetailView nesnemizi oluşturuyoruz. Bakın burada viewimize ondan önce oluşturduğumuz model nesnemizden aldığımız getitem fonksiyonunu geçiriyoruz. Tabi getitem fonksiyonuna da GET ten alacağımız idx değerini. Eğer idx tanımsız ise listeleme sayfasını oluşturuyoruz. Burada da listeleme sayfasına modelimizin verilerin tüm listesini döndüren getData fonksiyonunu geçirdik. getData nın herhangi bir parametresi yoktu.
Gördüğünüz gibi birbirinden habersiz çalışan model ve view sınıflarını birbirine bağlayan ve ilişkisel durumları yöneten bir controller sınıfımız var. Olaya bu bağlamda bakmayalım. Bir kaç modelin bir kaç modelle ve onlara bağlı daha çok viewle çaprazlama bağlandığını düşünürsek aslında bir ton kodlamadan kurtarmışız demektir. Ayrıca ney nerede idi diye aramak şeklinde bir sıkıntınız da yok. Herşeyin yeri belli.
Gelelim index.php mize. Malum kodlarımızı çalıştıracak sayfa.
include 'Controller/simpleController.php';
$controller = new simpleController();
?>
Evet oldukça basit bir sayfa. Controlleri çağır ve oluştur. MVC yapısı temelde bu kadar basit. Tabi ihtiyacınıza göre oluşturacağınız MVC katmanları falan filan proje boyutuna göre karışık gelebilir. Ancak normal spagetti kodla aynı projeyi yazmak daha karışık sonuçlara ulaşacağına eminim.
Bir sonraki yazımda görüşmek dileğiyle esenlikle kalın.
0 yorum:
Yorum Gönder