Saya mengerti setSaveParametersInSession() on a non-object
Itu ada di modul admin jalannya
Training/Distributor/Block/Adminhtml/
dalam folder ini yang saya miliki
Distributor/Grid.php
dan Distributor.php
class Training_Distributor_Block_Adminhtml_Distributor
extends Mage_Adminhtml_Block_Widget_Grid_Container
{
/**
* my understanding:
* $this->_blockGroup . '/' . $this->_controller . '_grid'
* i.e. training_distributor/adminhtml_distributor_grid
*/
public function _construct()
{
$this->_blockGroup = 'training_distributor';
$this->_controller = 'adminhtml_distributor';
$this->_headerText = $this->__('List Distributors');
$this->_addButtonLabel = $this->__('Add Distributor');
parent::_construct();
}
}
Mengapa saya mendapatkan kesalahan ini?
Saya tidak dapat melihat kesalahan ketik dan saya yakin $ this -> _ blockGroup dan $ this -> _ controller benar.
Apakah ada hal lain yang perlu saya cari? atau apakah saya melewatkan sesuatu?
Setelah pencarian di google dan stack saya telah menemukan orang-orang biasanya _blockGroup atau _controller, tetapi ini tampaknya tidak menjadi masalah bagi saya
===
EDIT
===
<config>
<modules>
<Training_Distributor>
<version>0.0.2</version>
</Training_Distributor>
</modules>
<global>
<resources>
<training_distributor_setup>
<setup>
<module>Training_Distributor</module>
</setup>
</training_distributor_setup>
</resources>
<models>
<training_distributor>
<class>Training_Distributor_Model</class>
<resourceModel>training_distributor_resource</resourceModel>
</training_distributor>
<training_distributor_resource>
<class>Training_Distributor_Model_Resource</class>
<entities>
<distributor>
<table>training_distributor_entity</table>
</distributor>
</entities>
</training_distributor_resource>
</models>
<blocks>
<training_distributor>
<class>Training_Distributor_Block</class>
</training_distributor>
</blocks>
<helpers>
<training_distributor>
<class>Training_Distributor_Helper</class>
</training_distributor>
</helpers>
</global>
<admin>
<routers>
<adminhtml>
<args>
<modules>
<training_distributor before="Mage_Adminhtml">Training_Distributor_Adminhtml</training_distributor>
</modules>
</args>
</adminhtml>
</routers>
</admin>
<adminhtml>
<layout>
<updates>
<training_distributor>
<file>training/distributor.xml</file>
</training_distributor>
</updates>
</layout>
</adminhtml>
</config>
config.xml
file Anda juga.__construct
metode, bukan_construct
.Jawaban:
Sulit untuk mengatakan dengan informasi yang Anda berikan, tapi beginilah cara saya men-debug ini.
Anda tidak menyebutkan file tempat Anda mengalami masalah ini, tetapi mungkin ini bagian dari wadah kotak widget dasar yang menjadi masalah Anda
yang berarti Magento mencoba untuk membuat kelas blok
Atau dalam kasus Anda
Untuk beberapa alasan, pada sistem Anda Magento tidak dapat membuat instance objek dari alias kelas ini, yang menghasilkan metode pada kesalahan non-objek.
Jadi, langkah pertama adalah menambahkan beberapa kode debug
_prepareLayout
untuk memastikan
_blockGroup
dan_controller
diatur dengan benar.Dengan asumsi mereka, sekarang Anda hanya men-debug pencarian kelas normal. Coba jalankan kode berikut untuk melihat apa yang menurut pendapat kelas PHP Magento harus digunakan untuk alias kelas Anda
Melirik konfigurasi Anda, ini harusnya seperti
Jika
$class
kosong atau salah, itu berarti Anda memiliki kesalahan dalamconfig.xml
file Anda . Anda dapat men-debug ini dengan melompat kegetGroupedClassName
metode.Ini adalah metode di mana Magento mereferensikan konfigurasi gabungan dan mengeluarkan nama kelas.
Akhirnya, jika
$class
ada mengandung nama kelas, itu berarti autoloader Magento tidak dapat menemukan kelas Anda. Coba instantiate kelas ini secara langsung (sekali lagi, sebagai latihan debugging)Anda mungkin akan mendapatkan semacam kelas yang tidak ditemukan kesalahan, baik karena
Kelas Anda tidak di lokasi yang tepat (
app/code/[codepool]/Training/Distributor/Block/Adminhtml/Distributor/Grid.php
Kelas yang didefinisikan
Grid.php
memiliki salah ketik di dalamnyasumber
Itu
$this->_blockGroup
adalah nama yang sangat membingungkan tetapi harus nama folder dan bukan modul. Jika Anda pikir saya harus$this->_blockGroup = 'distributor';
Jika Anda melihatnya
Mage_Currencysymbol_Block_Adminhtml_System_Currencysymbol
sebagai contoh, blockGroup adalah nama folder dan bukan nama modul di config.xmlsumber
distributor_distributor
?Periksa struktur folder Anda sekali lagi untuk memastikan bahwa semua file berada di jalur yang benar.
Dalam kasus saya untuk masalah ini file ditempatkan di lokasi yang salah. Saya menempatkan folder
Grid.php
dicontroller/Adminhtml
bukan ituBlock/Adminhtml/Grid.php
sumber
Periksa jalur Anda ke file distributor.xml. Itu harus ditempatkan di app / design / adminhtml / default / default / layout / distributor.xml.
Dalam kode yang terkait dengan config.xml yang Anda posting menunjukkan hal itu
daripada ini seharusnya seperti ini
dan file tersebut harus ditempatkan di app / design / adminhtml / default / default / layout / distributor.xml
Coba lakukan ini jika itu bukan skenario Anda saat ini.
sumber