Bir görünümde birden fazla modelin veri (web sayfası)

1 Cevap php

Ben MVC deseni yeni ama ben denemek istiyorum CakePHP çerçevesi için belgeleri okuyarak, örneğin, onu kavramak için çalışıyorlar. Ancak, şimdi ben nasıl başa gerçekten emin değilim, bir senaryo üzerine tökezledi.

Ben üzerinde çalışıyorum, web sitesi, dokuz adet sabit sayfalardan oluşur yani, dışında başka bir sayfayı da vardır asla. Her sayfa Ziyaretçi defteri sayfası gibi özel bir şey, misafir defteri notlar tutar içerir. Bununla beraber, ek olarak, her sayfa küçük bir haber kutusu ve bir yönetici düzenlemek gerekir kısa bir gerçektir kutusu tutan. Benim bakış itibaren, bu örneğin, model olarak kabul edilmelidir Ait denetimleri NewsPostController ve ShortFactController ile NewsPost ve ShortFact. Birbirlerine tamamen ilgisiz olduğuna dikkat edin.

Şimdi benim sorum, nasıl misafir kitap notları yanı sıra haber sonrası kutusu ve kısa gerçeği içeren tek bir görünümü (web sayfası) oluştururum edilir? I Do:

  1. Konuk kitap için (bir dizin () eylem ile) eşsiz bir kontrolör GuestBookController, kurmak, böylece www.domain.com / guest_book ziyaret endeksi eylem son haber mesajı ve rastgele bir kısa gerçeği almak sağlar?

  2. / Sayfalarında / ve PagesController getiriliyor yapalım statik sayfalar koymak?

  3. < Burada uygun bir şekilde doldurunuz. >

Şimdiden teşekkürler!

1 Cevap

Eğer unsurları içine bakmak gerekir gibi geliyor, yoksa düzen içine gömmek mümkün olabilir - ama bana sorarsanız bir eleman kullanmak için, kendi kıvrımlara ayrı şeyler tutun.

http://book.cakephp.org/2.0/en/views.html#elements

Bu size diğer görünümlere içine gömmek mümkün küçük görünümler oluşturmak için izin verir.

Ayrıca, bu görünümler için gerekli verileri yüklemek için (diğer tüm kontrolörler uygulama denetleyicisi uzatmak hatırlıyorum) AppController içine bazı mantık koymak gerekebilir. BeforeRender işlevi bu yararlı olmalıdır - onun CakePHP'de sağlayan kanca işlevlerinden biri, bu yüzden görünüm oluşturulmadan önce işlem bittikten sonra her zaman denilen bir kontrolör, üzerinde tanımlarsanız.

Lütfen AppController böyle bir şey yardımcı olacaktır:

function beforeRender() {
  $this->dostuff();
}

function doStuff() {
  // do what you need to do here - eg: load some data.
  $shortfacts = $this->ShortFact->findAll();
  $news = $this->NewsPost->findAll();
  // news and shortfacts will be available within the $shortfacts and $news variables in the view.
  $this->set('shortfacts', $shortfacts);
  $this->set('news', $news);
}

Bu DoStuff yöntemi kapsamında kullanılmak üzere uygulama denetleyicisi ihtiyaç modeller varsa, o zaman AppController üstündeki kullanımlar içinde onları tanımlamak gerekir

class AppController {
  var $uses = array('NewsPost', 'ShortFact');
}