Akışın Modellemesi
"Başlangıç kontrolcüsü üzerinden $this nesnesini data olarak göndererek statik olmayan sınıflara ilgili data üzerinden erişebilirsiniz."
Modeller genellikle MVC mimarisinin en karmaşık kısmıdır. Kod yoğunluğunun en fazla olduğu ve görünümlere gönderilmek üzere verilerin depolandığı bölümdür. Gerek PHP kodları gerekse de Database komutları bu yapılar üzerinde tasarlanır. Genellikle kullanıcıların en çok yaptığı hata bir modelin alması gereken sorumluluğu kontrolcüye vermeleridir. Bir kontrolcü sadece kullanıcı girdilerine göre süreci yönlendirmek gibi basit kodların yer aldığı bölüm olmalıdır. Bunların dışında kalan tüm kodsal işlemler model içerisinde yer alır.
Model dosyaları Models/ dizini içerisinde oluşturulur.
# Bölüm Başlıkları
# Model Dosyası Oluşturmak
Aşağıdaki gibi örnek bir model dosyası oluşturabilirsiniz.
<?php
class UsersModel extends Model
{
public static function rowId(int $id)
{
return DB::whereId($id)->users()->row();
}
}
Tek yapmanız gereken modelinizi kontrolcü içinde çağırmaktır. Eğer model ile kontrolcü adı aynı olursa model sınıfınızı kontrolcüde takma isimle kullanmanız gerekmektedir. Bu durum zaten Nesne Yönelimli Programlamanın bir kuralıdır.
<?php namespace Project\Controllers;
use UsersModel;
class Users extends Controller
{
public function main()
{
output( UsersModel::rowId(5) );
}
}
# Internal Model Tasarımı
Oluşturacağınız dinamik model sınıflarınızı Model::method() formunda kullanmak için class adının başına internal ön getirerek tanımlayınız. Normal şartlarda sınıf yöntemi statik değilse yukarıdaki formda erişilemez. Ancak statik tanımlamalar bazı kullanımları kısıtladığı için sınıf tasarımları dinamik formda gerçekleştirilir. Bu dinamik tanımlamalara rağmen yöntemlere statik erişmeniz bu ön ek sayesinde mümkündür.
<?php
class InternalUsersModel extends Model
{
public function rowId(int $id)
{
return DB::whereId($id)->users()->row();
}
}
Yukarıdaki tanımlamadan sonra model dosyasını aşağıdaki gibi kullanabilirsiniz.
<?php namespace Project\Controllers;
use UsersModel;
class Users extends Controller
{
public function main()
{
output( UsersModel::rowId(5) );
}
}
# Dev Model Genişletmesi
Grand Model genişletmesi veritabanı yöntemlerini daha kullanışlı ve pratik hale getirmek için tasarlanmıştır. Konunun devamı için tıklayınız. Yine de örnek vermek gerekirse bu genişletme ile yukarıda rowId() için yaptığımız tanımlamalara gerek kalmıyor.
<?php
class InternalUsersGrand extends GrandModel
{
}
Yukarıdaki tanımlamadan sonra model dosyasını aşağıdaki gibi kullanabilirsiniz.
output( UsersGrand::rowId(1) );