Daha önceden düz mantık php kodlarken artık OOP'e geçmeye karar verdim. Öncelikle class yapısını iyice öğrenmem gerekiyor. Bu yüzden basit bir mvc yapısı hazırlayarak hem mantığını kavramak hem de öğrenme işlemini tamamladıktan sonra kullanacağım herhangi bir php framework'te çuvallamak istemiyorum. Sorunumu anlatacak olursam:
Anasayfam için bir Home.php controller dosyası oluşturdum ve içeriğini şu şekilde yaptım:
Home.php Controller dosyamdaki index fonksiyonum
public function index()
{
$this->view('home', array(
'header' => $this->model('header')->main(),
'topmenu' => $this->model('menu')->topmenu(),
'mainmenu' => $this->model('menu')->mainmenu()
)
);
}
header.php modelim
class Header extends Model {
public function main()
{
$settings = $this->db->query('SELECT * from tm_settings where id=1')->fetch();
$title = $settings['title'];
$description = $settings['description'];
$keywords = $settings['keywords'];
}
}
model dosyalarımı oluşturup ilgili kısımları çektim. Menülerimde herhangi bir problem yok. Fakat model dosyası içinde html kod kullanmak istemediğim için header bilgilerimi (title,description,keywords) view klasöründe header.php oluşturup bunun içinde göstermek istiyorum ve bu header.php dosyasının home.php ile bütünleşik olması gerekiyor.
1. sorum Controller dosyası içinden modelimizi çağırıp işlemi view dosyasına aktarıyoruz buraya kadar problem yok fakat model klasörümdeki header.php dosyasının içeriğini direkt olarak controller dosyasına çağırmadan view dosyasına nasıl aktarabilirim?
2. Birinci sorumda yapmaya çalıştığım şey mantıksız ise eğer title,description,keywords gibi değerleri alabilmek için nasıl bir yol izlemem gerekiyor. Yani header modelinde main fonksiyonumun içindeki $title değişkenini nasıl view'e aktarabilirim. Aktaramıyorsak her biri için fonksiyon mu yazmam gerekiyor? (Burası biraz kafamı kurcalıyor)
3. Benim amacım her controller dosyasında header bilgilerini tekrar tanımlamak istememem. 1 tane header dosyam olsun bütün controller dosyalarımı bu header modeli ile birlikte view'e aktarayım.