Ich erhalte setSaveParametersInSession() on a non-object
Es ist auf einem Admin-Modul der Pfad
Training/Distributor/Block/Adminhtml/
In diesem Ordner habe ich
Distributor/Grid.php
und 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();
}
}
Warum bekomme ich diesen Fehler?
Ich kann keine Tippfehler sehen und bin sicher, dass $ this -> _ blockGroup und $ this -> _ controller richtig sind.
Gibt es noch andere Dinge, nach denen ich suchen muss? oder habe ich was verpasst
Nach einer Suche in Google und Stack habe ich normalerweise _blockGroup oder _controller gefunden, aber das scheint bei mir nicht der Fall zu sein
===
BEARBEITEN
===
<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
auch Ihre Datei hinzu.__construct
Methode statt_construct
.Antworten:
Es ist schwer zu sagen mit den Informationen, die Sie zur Verfügung gestellt haben, aber hier ist, wie ich das debuggen würde.
Sie haben nicht erwähnt, in welcher Datei Sie dieses Problem hatten, aber es ist wahrscheinlich der Teil des Basis-Widget-Grid-Containers, der Ihr Problem ist
was bedeutet, dass Magento versucht, die Blockklasse zu instanziieren
Oder in deinem Fall
Aus irgendeinem Grund kann Magento auf Ihrem System kein Objekt aus diesem Klassenalias instanziieren, wodurch die Methode einen Nicht-Objekt-Fehler verursacht.
Also, Schritt eins ist das Hinzufügen von Debug-Code
_prepareLayout
um sicherzustellen, dass die
_blockGroup
und_controller
richtig eingestellt sind.Angenommen, dies ist der Fall, dann debuggen Sie gerade eine normale Klassensuche. Versuchen Sie, den folgenden Code auszuführen, um festzustellen, welche PHP-Klasse Magento für Ihren Klassenalias verwenden sollte
Wenn Sie sich Ihre Konfiguration ansehen, sollte dies in etwa so aussehen
Wenn
$class
leer oder falsch ist, liegt ein Fehler in Ihrerconfig.xml
Datei vor. Sie können dies debuggen, indem Sie zurgetGroupedClassName
Methode springen .Dies ist die Methode, bei der Magento auf die zusammengeführte Konfiguration verweist und einen Klassennamen abruft.
Wenn schließlich
$class
hat einen Klassennamen enthält, bedeutet dies , Magento Autoloader- nicht Ihre Klasse finden. Versuchen Sie, diese Klasse direkt zu instanziieren (erneut als Debugging-Übung).Sie werden wahrscheinlich eine Art Fehler erhalten, der nicht gefunden wurde, auch weil
Ihre Klasse ist nicht am richtigen Ort (
app/code/[codepool]/Training/Distributor/Block/Adminhtml/Distributor/Grid.php
Die in definierte Klasse
Grid.php
enthält einen Tippfehlerquelle
Der
$this->_blockGroup
Name ist sehr verwirrend, sollte aber der Ordnername und nicht das Modul sein. In deinem Fall denke ich sollte es sein$this->_blockGroup = 'distributor';
Wenn Sie sich
Mage_Currencysymbol_Block_Adminhtml_System_Currencysymbol
als Beispiel ansehen, ist die blockGroup der Ordnername und nicht der Modulname in der config.xmlquelle
distributor_distributor
?Überprüfen Sie die Ordnerstruktur noch einmal, um sicherzustellen, dass sich alle Dateien im richtigen Pfad befinden.
In meinem Fall für dieses Problem wurde die Datei am falschen Ort platziert. Ich habe den
Grid.php
incontroller/Adminhtml
Ordner eher so abgelegtBlock/Adminhtml/Grid.php
quelle
Überprüfen Sie Ihren Pfad zur Datei distributor.xml. Es sollte in app / design / adminhtml / default / default / layout / distributor.xml abgelegt werden.
Zeigen Sie dies in dem Code, der mit config.xml zusammenhängt, den Sie gepostet haben
eher als das sollte es so sein
und die Datei sollte unter app / design / adminhtml / default / default / layout / distributor.xml abgelegt werden
Versuchen Sie dies, wenn es nicht Ihr derzeitiges Szenario ist.
quelle