Akışın Modellemesi
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 Datab…
This article is currently available in Turkish. Its English translation is being prepared.
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.
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.
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.
class FacadeUsersModel 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.
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.
class FacadeUsersGrand extends GrandModel
{
}
Yukarıdaki tanımlamadan sonra model dosyasını aşağıdaki gibi kullanabilirsiniz.
output( UsersGrand::rowId(1) );