Çıplak Zend_Layout ve Zend_View

Tarafından Steven Lloyd Watkin , Salı 10 Ağustos 2010 23:47

Bu yazımda bu uygulama içinde iş mantığını ve sunumu ayıran başlatmak mümkündür göstermek için basit bir ön kontrolör ile birlikte Zend_Layout ve Zend_View kullanarak bakıyorum. Tüm kodu github mevcuttur:
Çıplak Zend_Layout ve GitHub üzerinde Zend_View .

MVC

Ortak bir tasarım deseni uygulamaları için modern web kalıptır MVC. Zend Framework de 'tam yığın' modunda bir MVC uygulaması biridir PHP ve parçaları üç oluşur:

  • Model (M)
  • Görünümü (V)
  • Kontrolör (C)

Desen tasarlanmış bu tür iş ve sunum mantığı tamamen birinden ayrılmış olduğundan "orkestra" semineri ortasında oturan bir başka (modelde iş mantığı ve sunum görünümünde) ve denetleyici.

Sunum ve Mantık

ele görünümüdür iki Zend_Layout ve Zend_View ana bileşenleri: Çerçevesinde Zend. isim olarak Zend_Layout sitenin düzeni yönü sonra görünüyor (genellikle başlıklar, altbilgiler, kenar çubuğunu, vb) öneriyor. Zend_View modelinizi üretmek için ya da türetmek çalışıyor verileri sunma konusuna odaklanmış durumda.

geliştiricileri, ve uygulamaları, geliştikçe biz, çeşitli aşamalardan önceki geliştirerek idame ve genişletilebilirlik üzerinde genellikle her bir gelişme hareket etme eğilimi. ana konulardan biri tanıtımı ve mantık hala onun değil iki ayıran başlamak için basit ve içe elde edilmesi.

Ne iki karıştırma nesi yanlış?

Ostrich Farklı uygulama parçaları karıştırma neden nerede tanıtımı değişiklik yapmak için yürütmeye çalışıyoruz kod etrafında taramak için (ya da bilgi sahibi) istemeyebilirsiniz sitenizde çalışan bir tasarımcı, örneğin birkaç nedeni var. Aynı şekilde bir geliştirici (benim gibi iseniz kim bir devekuşu ve tasarım becerileri vardır) tasarım veya UI çalışma söz ne zaman soğuk bir ter patlak olabilir.

Ayrıca ne cep telefonu, tablet PC'ler, ya da gibi farklı medya, üzerinde site sunmak istiyorum daha sonra eğer web servisleri aracılığıyla veri ifşa (XML / JSON / vs)? karma sunum ve mantık olması, yeni bir şey enjekte önce dışarı kodunuzun tanıtımı çekmek için bazı çok çirkin kesmek olmadan hemen hemen hiç umut duruyorum. veri ve sunum Bu değişiklikleri yaptıktan ayrılmış olması durumunda yeni biçime uygun olarak doğrudan istekleri için yeni bir kod görüntüleme oluşturmak, neredeyse önemsiz.

iki Ayırma

bazen yeni paralel olarak eski kod çalıştırma - gelişmekte olan bir uygulamanın her uygulamanın yavaş yavaş göç gereken tam MVC çözüm ve uygulama başlatmak için ekonomik değil ise. O seçtiğiniz çerçeveler kurulum, kalıplama için hazır değildir (veritabanı bağlantısı kurulumu, kimlik doğrulama, cookie kullanımı, vb gibi) mantık kütleleri vardır belki bu nedenle bilinen ve-to-be-çalışan eski kod devam edilebilir o / refactored yazılabilir bu zamana kadar kullanılmıştır.

Not: Kullanma Zend_Layout ve Zend_View bunu beğendi ve Çerçeve peyzaj Zend kusursuz kabul edilebilir içinde olduğunu Çerçeve kalan edildi olmadan kullanılabilir bireysel bileşenleri tasarlanmış gibi. gelişen uygulamalar avantajı büyük ve kurumsal uygulamalarda yüksek alımı için önemli nedenlerinden biri belki de.

Ön Kontrol

dosya sistemindeki bir dosyaya denk olmayan herhangi bir istekleri almak için tasarlanmış tek bir dosya - Aşağıda bir ön kontrol oluşturmak. Bu genellikle Zend Framework yüklemek varsayılan kullanılan gibi bir. Htaccess dosyası kullanarak elde edilir. ön kontrolör içinde ben düzeni ve görünümü ayarlama olacak ve gösteren nerede içine uygulama kayma farklı parçalar.

  'APP_PATH' dirname (__FILE__ define ().'/..');
 / / Start tamponu
 ob_start ();

 / / A Zend_View örneği oluşturma
 Zend_Layout: startMvc ();
 $ Düzen = Zend_Layout: getMvcInstance ();
 $ Düzen-> setLayoutPath (APP_PATH. '/ Düzeni / scripts')
     -> SetViewSuffix ('phtml')
     -> SetLayout ('index');

 $ View = $ düzen-> getView ()
     -> SetScriptPath (APP_PATH '/ bakış / scripts'.)
     -> AddHelperPath (. APP_PATH '/ library / Zend / Görünüm / Yardımcı', 'Zend_View_Helper');

 / / Set Temel URL - neredeyse * çıplak * tamam, ama buna gerek yok!
 Zend_Controller_Front: getInstance () -> setBaseUrl ($ _SERVER ['HTTP_HOST']);

 Try {
     / **
      * Gerçekleştirin yönlendirme bazı uygulama ...
      * - Bir ön kontrolör olarak kullanarak olabilir ve tüm istekleri yönetmenlik
      * Bu bir dosya (dosya sistemi yok Sağladığınız dosya üzerinden
      * - Olurdu, aşağıdaki yöntemi gösteri için sadece gerçekten Not
      * Büyük bir site ile korkunç
      * /
     ($ _GET ['Sayfa']) {switch
    	 case 'index':
    	 case 'istisna':
    		 $ Pagename = $ _GET ['sayfa'];
    		 break;
    	 default:
    		 $ Pagename = false;
    		 break;
     }
     / / Bir sayfa örneği bulundu olmamak ...
     (Yanlış === $ pagename) {if
         $ ResponseHeader = 'HTTP/1.1 404 Sayfa Bulunamadı';
         ('Sayfa bulunamadı') throw new Exception;
     }

     / **
      * Burada nesnesi görüntülemek için veri ekleme
      * Kendi kontrol uygulama olabilir veya bazı dosyaları içerir
      iş mantığı kısmen görmek mantık ayrılır * nerede
      * /
     = 'Lloyd Hello' $ görünüm-> görüntülenenmetin;
     $ Görünüm-> buttonText = 'I \' aktif değilim! ';

	 $ Düzen-> İçerik = $ görünüm-> render (". {$ Pagename} phtml");
     $ Düzen-> render () yankı;
 } (Exception $ e) {yakalamak
	 / / Temizlik şimdiden içerik tamponlu - biz bu ekran istemiyorum!
	 ob_clean ();
     if (! isset ($ responseHeader)) {
    	 $ ResponseHeader = 'HTTP/1.1 500 Internal Server Error';
     }
     header ($ responseHeader);
     $ Görünüm-> istisna = $ e;
     $ Düzen-> İçerik = $ görünüm-> render ('error.phtml');
     $ Düzen-> render () yankı;
 } 

Öncelikle biz istek herhangi bir noktada bizim başlıkları ayarlayabilir ve bunları göndermek mümkün olduğunu biliyor bu yaparak, çıktı tamponlama başlar. Bir istisna bu tampon temiz ve / veya hata mesajı içeriği ve düzeni yazmak kod yürütülmesine herhangi bir aşamasında atılmış olmalı. Bu bizim bölüm son kullanıcı hataları içerikli hale teslim yok olmasını sağlar.

Zend_Layout yeni bir MVC örneği oluşturulur Next ve düzen komut uzatma phtml sahip çıkışı, kamu yolun dışında bir dizinde bulunacak olduğunu ve bizim varsayılan düzen indeksi denir onu söyle (. Phtml). düzen itibaren sonra (biz kümesi bizim veri sunulacak için) görmek nesnenin özü ve benzeri kurulum geçerlidir.

Sonra kurulum varsayılan Zend_View yardımcıları bir başvuru ile görüntülemek nesnesi. Görünüm yardımcıları ek kolaylık işlevsellik kümesidir. Örneğin, biçim para float dışında bir yazı ya da oluşturma hakkında bir zebra çizgili tablo (okunabilir onlar burada ). Zend_View_Helper_Abstract uzanan ve ekleyerek kendi kütüphane olası bu noktada kendi uygulama görmek yardımcıları kullanmak By.

uygulama kod kalan artık try {} catch {} bloğunda sarılır. hiçbir şey onu yakalamak ve son kullanıcı için güzel bir hata iletisi görüntüler bir yakalanmamış istisna mıyım.

} {deneyin catch {} içerisinde yapılan ilk görevi ne kullanıcı görmek istemiyor rota bizim isteği mi? Burada ben değişken olsun 'sayfa' değerini kontrol bazı çok basit gösteri kod geliştirdik. Sizin çok daha karmaşık olabilir yönlendirme. Yönlendirme hiç kod ve / kullanıcı tarafından sağlanan veri işlemek ne olduğunu görmek (ve muhtemelen düzen script) kullanmak için sistem söylemek için idam gerekenleri aramak için kullanılır.

bizim yönlendirici bir 404 yanıt kodu setleri ve güzel bir sayfa değil son kullanıcıya mesaj bulundu görüntüler, herhangi bir sayfada uymuyor Sonuçta eğer. Burada, atmak ve kendi istisna yakalamak (ve de çok genel bir durum) ama muhtemelen yönlendirici kod içinden kendi istisna atma olurdum.

Bir kez başarıyla biz kod ile bir şeyler yapmaya başlayabilirsiniz isteğimiz yönlendirilir ettik. O kendi kontrolörleri / yürütülen modelleri var olabilir veya zaten biraz ayrılmış oldu bazı kodlar yer alıyor. Ben burada görmek nesneye basit değişkenler bir çift ayarlayın.

Bir zamanlar bu biz sadece bizim veri ile görüş render tamamlandı. kodu herhangi bir nedenle bir yakalanmamış istisna atar Eğer bu komut altına yakın tutulur. Burada biz zaten çıkış tamponlu açık, 500 yanıt başlığı seti ve (genellikle normal düzen çok daha basit sürümü / view olan ve daha sonra kontrol için hata günlükleri) 'error' kod görüntüleme işlemek için bizim uygulama söyle.

görünümünde ilk çevriliyor olarak ve bu görünümü içinde düzeni değiştirmek ve gerçekten gerekli ekstra set, örneğin mümkün düzen içine enjekte

  • Sayfa başlığı
  • Meta etiketleri
  • <head> bölüme Scripts (URL veya kod)
  • vs, ilave stiller ekle

Ayrıca kendi bile kullanarak görünümü içinde tüm düzenini değiştirmek mümkün ...

  düzen () <php $ this-? -> setLayout ('alternativeLayout')>? 

... Ve ne zaman gerekli.

Nihayet ...

Bu Zend_Layout ve Zend_View için yararlı bir giriş oldu ve kendi temel MGD uygulamaya başlayabiliriz sağlayacak ve maintainibility / genişletilebilirlik kodunuzun geliştirmek umuyoruz. (Talimatlar için README dosyasına bakın) kullanım örnekleri için kaynak koduna göz atabilirsiniz.

Code) sınıfları varsayar gerektirdiği dahil ettik you've zaten ya da (var Özdevinimli çalışma size. Buna ek olarak, gösteri için basitleştirilmiş çok olurdu çok değil öneririz yönlendirme uygulamak veya veri ayarı olarak bu yukarıda. Bu yazı için bkz üstündeki kaynak kodu ile bakmak tam kodu.

Zend Framework sürüm: 1.10.6

"Çıplak Zend_Layout ve Zend_View" Bir Yanıt

  1. Andy diyor ki:

    Iyi teşekkürler, çok bilgilendirici ve yazılı!

Bir Yanıt bırak













Panorama Tema tarafından Themocracy

8 ziyaretçi online şimdi
6 misafir, 2 bot, 0 üye
bugün Max ziyaretçi: 14 07:34 UTC am
Bu ay: 26 de 2011/07/05 12:35 UTC am
Bu yıl: 130 28-03-2011 22:40 UTC
Tüm zamanların: 130 28-03-2011 10:40 UTC