Je suis en train setSaveParametersInSession() on a non-object
C'est sur un module d'administration que le chemin est
Training/Distributor/Block/Adminhtml/
dans ce dossier j'ai
Distributor/Grid.php
et 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();
}
}
Pourquoi ai-je cette erreur?
Je ne vois aucune faute de frappe et je suis sûr que $ this -> _ blockGroup et $ this -> _ controller ont raison.
Y a-t-il d'autres choses que je dois rechercher? ou ai-je raté quelque chose?
Après une recherche sur google et stack, j'ai trouvé des gens généralement _blockGroup ou _controller, mais cela ne semble pas être le cas pour moi
===
ÉDITER
===
<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
fichier.__construct
méthode au lieu de_construct
.Réponses:
C'est difficile à dire avec les informations que vous avez fournies, mais voici comment je déboguerais cela.
Vous n'avez pas mentionné le fichier dans lequel vous rencontriez ce problème, mais c'est probablement cette partie du conteneur de grille de widget de base qui est votre problème
ce qui signifie que Magento essaie d'instancier la classe de bloc
Ou dans votre cas
Pour une raison quelconque, sur votre système, Magento ne peut pas instancier un objet de cet alias de classe, ce qui entraîne la méthode sur une erreur non liée à un objet.
Donc, la première étape consiste à ajouter du code de débogage à
_prepareLayout
pour vous assurer que
_blockGroup
et_controller
sont correctement réglés.En supposant qu'ils le soient, maintenant vous déboguez simplement une recherche de classe normale. Essayez d'exécuter le code suivant pour voir quelle classe PHP Magento pense qu'il devrait utiliser pour votre alias de classe
En jetant un œil à votre configuration, cela devrait être quelque chose comme
Si
$class
est vide ou faux, cela signifie que vous avez une erreur dans votreconfig.xml
fichier. Vous pouvez déboguer cela en passant à lagetGroupedClassName
méthode.Il s'agit de la méthode dans laquelle Magento référence la configuration fusionnée et extrait un nom de classe.
Enfin, si
$class
ne contient un nom de classe, cela signifie que le chargeur automatique de Magento ne peut pas trouver votre classe. Essayez d'instancier directement cette classe (à nouveau, comme exercice de débogage)Vous obtiendrez probablement une sorte d'erreur de classe non trouvée, soit parce que
Votre classe n'est pas au bon endroit (
app/code/[codepool]/Training/Distributor/Block/Adminhtml/Distributor/Grid.php
La classe définie dans
Grid.php
contient une faute de frappela source
Le nom
$this->_blockGroup
est très déroutant mais il doit s'agir du nom du dossier et non du module. Dans votre cas, je pense que ça devrait être$this->_blockGroup = 'distributor';
Si vous regardez
Mage_Currencysymbol_Block_Adminhtml_System_Currencysymbol
comme un exemple, le blockGroup est le nom du dossier et non le nom du module dans le config.xmlla source
distributor_distributor
?Vérifiez une fois de plus la structure de votre dossier pour vous assurer que tous les fichiers se trouvent au bon chemin.
Dans mon cas pour ce problème, le fichier a été placé au mauvais endroit. J'ai placé le
Grid.php
danscontroller/Adminhtml
plutôt dossierBlock/Adminhtml/Grid.php
la source
Vérifiez votre chemin d'accès au fichier distributeur.xml. Il doit être placé dans app / design / adminhtml / default / default / layout / distribution.xml.
Dans le code lié à config.xml que vous avez publié, montrez que
plutôt que cela, il devrait être comme ça
et le fichier doit être placé dans app / design / adminhtml / default / default / layout / distribution.xml
Essayez de faire cela si ce n'est pas votre scénario actuel.
la source