Akışın Modellemesi


    × Bunları biliyor muydunuz?
"Theme::active() yöntemi ile görünümlerin içerisinde yer alan img, script, link gibi etiketlerin dosya yol bilgilerine dokunmadan otomatik olarak algılanmasını sağlayabilirsiniz."


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

# Modelin Kontrolcüye Dahili

# internal Model Tasarımı
# Dev Model Genişletmesi

 

 

# Model Dosyası Oluşturmak


Aşağıdaki gibi örnek bir model dosyası oluşturabilirsiniz.

File: Projects/Frontend/Models/UsersModel.php
<?php 
class UsersModel extends Model
{
    public static function rowId(int $id)
    {
         return DB::whereId($id)->users()->row();
    }
}
Modelin Kontrolcüye Dahili

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. 

File: Projects/Frontend/Controllers/Users.php
<?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.

File: Projects/Frontend/Controllers/Users.php
<?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) );