2013-08-19 9 views
6

Ich bin ein wenig verwirrt. Ich lese Alan Storms ausgezeichneten Artikel über Magento Block Lifecycle Methods und soweit ich verstehe, sollte man die protected _construct() Methode verwenden, um den Block zu initialisieren. In meinem Fall möchte ich nur die richtige Blockvorlage einstellen. Also gehe ich davon aus ichMagento Block-Konstrukt - _construct oder __construct verwenden?

verwenden sollten
protected function _construct() 
{ 
    parent::_construct(); 
    $this->setTemplate('stenik/qaforum/forum.phtml'); 
} 

Allerdings, wenn ich an den Blöcken von einigen der Kern Magento Module aussehen, sie scheinen die PHP __construct Methode zu verwenden, es zu tun. Zum Beispiel Mage_Poll_Block_Poll, Mage_ProductAlert_Block_Price, Mage_Rating_Block_Entity_Detailed, Mage_Review_Block_Form

Obwohl beiden Wege tatsächlich funktionieren, würde ich gerne wissen, was der richtige Weg, es zu tun ist.

Antwort

8

Es ist letztlich akademisch, aber der richtige Weg It® zu tun ist, um den Magento-Konstruktor dh _construct außer Kraft zu setzen, wie durch das Kernteam in Mage_Core_Block_Abstract angefordert:

/** 
* Internal constructor, that is called from real constructor 
* 
* Please override this one instead of overriding real __construct constructor 
* 
*/ 
protected function _construct() 
{ 
    /** 
    * Please override this one instead of overriding real __construct constructor 
    */ 
} 
+5

+1 für die richtige Beratung, aber das isn‘ t 100% akademisch - Wenn Sie die '__construct'-Methode überschreiben, können Sie das Elternobjekt' __construct' nicht aufrufen, oder die übergeordneten '__construct'- und Konstruktorargumente aufrufen. Dies kann zu Inkonsistenzen bei der Verwendung von Blöcken in Layout-XML-Aktualisierungen führen. –

+0

Erwähnenswert ist, wie ich meine Antwort davon ausgeht, dass Entwickler immer das Richtige tun. – benmarks

Verwandte Themen