Zend Framework: init () ve denetleyici nesneleri preDispatch () fonksiyonları arasındaki farklar nelerdir?

3 Cevap php

Ben yürütme sırası init (), preDispatch () ve ardından eylem () denir olduğunu düşünüyorum.

  1. (Benim init tüm eylemleri arasında yaygın olan değişkenleri, () veya preDispatch başlatmak gerekir)? Ben başlatma için hem fonksiyonlarını kullanarak insanlar gördüm. Adından da anlaşılacağı Muhtemelen gibi (init yapılmalıdır) ama sonra ne tür şeyler) (preDispatch gitmek istiyorsunuz?

  2. Ne (init arasında olur) ve preDispatch () işlevini çağırır?

3 Cevap

İlk preDispatch() Zend_Controller_Plugin_Abstract örneklerini denir. Burada istek ve tepki nesneler var, bu yüzden isteği filtre veya istek bilgilerini kullanarak bazı hazırlık yapabilir.

init() Zend_Controller_Action kurucu parçası olarak önümüzdeki denir edilir. Bu yapıcı imza geçersiz kılmak ve tekrarlamak zorunda kalmadan, sizin denetleyici başlatmak yardımcı olmak için orada (Zend_Controller_Action::__contruct()).

Kontrolörün preDispatch() yöntemi burada denir. Değil emin init() o yapabilirsiniz - Eğer $request->setDispatched(false) geçerli eylemi atlamak için arayabileceğiniz

Sonra eylem yöntemi (viewAction() örneğin) denir. Burada modelden malzeme getiriliyor ve görünümü doldurma gibi normal bir iş yapmak.

Yani ayrım artık açık olmalıdır:

  • Bir şey tüm eylemler önce idam istiyorsanız - bir eklenti koymak ve (yanında preDispatch() routeStartup ve others var) kanca birini kullanın,
  • init veya preDispatch(), - bir denetleyicisi her eylem öncesi istiyorsanız
  • eylem kendisi - tek bir eylem için yalnızca.

Ne init() ve preDispatch() işlev çağrıları arasında olur?

Neredeyse hiçbir şey - preDispatch() yürütülür ve $request->setDispatched(false) denilen varsa, eylemi yürütülür.

  • init() yöntemi, esas olarak kurucu olarak uzanan için tasarlanmıştır. Tipik olarak, yapıcı yalnızca nesne durumunu ayarlamak, ve çok mantığını gerçekleştirmek gerekir. Bu (vb modellerde, yapılandırma nesneleri gibi) kontrol ünitesinde kullanılan kaynaklar başlatılıyor veya ön denetleyicisi, bootstrap, ya da bir kayıt defteri alınan değerleri atama içerebilir.

  • preDispatch() yöntemi de (vb, örneğin, görünüm, eylem yardımcısı) devlet nesneyi veya çevresel ayarlamak için kullanılabilir, ancak birincil amacı istenen eylem sevk edilmelidir ilgili olsun veya olmasın kararlar olduğunu. Değilse, o zaman _forward başka bir eylem gerektiği, ya da bir istisna.


Not: init çalıştırıldığında _forward aslında iki yöntemin niyetleri bir resmileştirilmesi olan () düzgün çalışmaz.

init(): fonksiyonlardan önce Loaded, Yani projenin tüm fonksiyonları önce yüklemek istiyorsanız, önyükleme Sınıfı'nda koy. Belirtilen sınıf işlevleri önce ise, init() Bu sınıf işlevi de koy.

preDispatch(): Ön Kontrol önce Loaded.