Magento Özel Modül, Ölümcül hata: Bir üye işlev setFormAction Çağrı ()

1 Cevap php

Ben bu url benim modülünü vurduğunuzda http://localhost/xxx/index.php/TradeEnquiry bu hatayı alıyorum

Fatal error: Call to a member function setFormAction() on a non-object in C:\wamp\www\stockdisplays\app\code\local\Stock\Tradeenquiry\controllers\IndexController.php on line 55

Hat 55 şudur:

 $this->getLayout()->getBlock('tradeenquiryView')
            ->setFormAction( Mage::getUrl('*/*/post') );

Bu benim düzen xml bir parçası şudur:

<default>
    <reference name="footer_links">
        <action method="addLink" translate="label title" module="tradeenquiry">
    			<label>Trade Enquiry</label>
    			<url>tradeenquiry</url>
    			<title>Trade Enquiry</title>
    			<prepare>true</prepare>
    		</action>
    </reference>
</default>

<tradeenquiry_index_index>
    <reference name="root">
        <action method="setTemplate"><template>page/2columns-right.phtml</template></action>
        <action method="setHeaderTitle" translate="title" module="tradeenquiry"><title>Trade Enquiry</title></action>
    </reference>
    <reference name="content">
        <block type="core/template" name="tradeenquiryView" template="tradeenquiry/view.phtml"/>
    </reference>
</tradeenquiry_index_index>

Ben sorunun ne olduğunu alamadım? bloğu doğru bir şekilde 'tradeenquiryView' adı verilir. Aklıma tek şey düzen xml şekilde önbelleğe olmasıdır? I / TradeEnquiry üzerinde modülü vurmak zorunda değil / tradeenquiry benim düzeni xml belirttiğimiz gibi, bu yüzden de onun neredeyse onun eski bir sürümünü kullanıyor gibi?

1 Cevap

Her şey Magento gibi, bu oluyor olabilir bir çok nedeni var.

Öncelikle, ben senin bloklar adlandırırken bir harf "V" kullanarak önlemek istiyorum. (Isimler URI'lar başvuruları (çekirdek / textlist, vb) ve şablon filepath (/ yol / / template.phtml) gibi) I think Bu bir soruna neden olmaz rağmen, bir de var küçük harf düzeni sisteminde-facto adlandırma kuralı / birisi, bir yere (yani Varien) zorunlu bir kongre karar verebilir isimleri altını çiziyor.

İkinci olarak, çağırdı

$this->loadLayout();

Denetleyiciniz eylem hattına önce form eylemi ayarlamaya çalışırsanız nerede? Eğer bu Düzeni nesne örneği ve / veya blok nesneler aracılığıyla bir başvuru olmayacaktır; kadar

$this->getLayout()->getBlock('...')

her zaman false dönecektir.

Diğer hata ayıklama ipuçları. Eğer gerektiğini düşünüyorum sınıfları geri alıyoruz emin olmak için aşağıdakileri deneyin.

die(get_class($this->getLayout()->getBlock('root')));									
die(get_class($this->getLayout()));

Tüm bu başarısız olursa nihayet, düzen nesnenin kaynağına gitmek

app/code/core/Mage/Core/Model/Layout.php

Ve getBlock yöntemi bir göz atın

public function getBlock($name)
{
    if (isset($this->_blocks[$name])) {
        return $this->_blocks[$name];
    } else {
        return false;
    }
}

ve sistem bloğuna bir başvuru dönen değil neden anlamaya görmek için hata ayıklama ifadeleri atarak başlar. Kaldırmak için unutma / değil-check-in, hata ayıklama ifadeleri Bu çekirdek sistem kodu gibi.