Я получаю setSaveParametersInSession() on a non-object
Это находится на модуле администратора путь
Training/Distributor/Block/Adminhtml/
в этой папке у меня есть
Distributor/Grid.php
и 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();
}
}
Почему я получаю эту ошибку?
Я не вижу никаких опечаток, и я уверен, что $ this -> _ blockGroup и контроллер $ this -> _ верны.
Есть ли что-то еще, что мне нужно искать? или я что то пропустил?
После поиска в Google и в стеке я нашел людей, обычно _blockGroup или _controller, но мне кажется, что это не так
===
РЕДАКТИРОВАТЬ
===
<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
файл также.__construct
метод вместо_construct
.Ответы:
Трудно сказать с информацией, которую вы предоставили, но вот как я могу отладить это.
Вы не упомянули, в каком файле возникла эта проблема, но, вероятно, именно эта часть контейнера сетки виджетов является вашей проблемой.
что означает, что Magento пытается создать экземпляр класса блока
Или в вашем случае
По какой-то причине в вашей системе Magento не может создать экземпляр объекта из псевдонима этого класса, что приводит к методу при ошибке, не связанной с объектом.
Итак, первый шаг - добавление кода отладки в
_prepareLayout
чтобы убедиться, что
_blockGroup
и_controller
установлены правильно.Предполагая, что это так, теперь вы просто отлаживаете обычный поиск классов. Попробуйте запустить следующий код, чтобы увидеть, что PHP-класс Magento думает использовать в качестве псевдонима класса.
Взглянув на свой конфиг, это должно быть что-то вроде
Если
$class
пусто или неверно, это означает, что у вас есть ошибка в вашемconfig.xml
файле. Вы можете отладить это, перейдя кgetGroupedClassName
методу.Это метод, в котором Magento ссылается на объединенную конфигурацию и извлекает имя класса.
Наконец, если
$class
оно содержит имя класса, это означает, что автозагрузчик Magento не может найти ваш класс. Попробуйте создать экземпляр этого класса напрямую (опять же, как упражнение по отладке)Вы, вероятно, получите какую-то ошибку класса not found, либо потому что
Ваш класс не в правильном месте (
app/code/[codepool]/Training/Distributor/Block/Adminhtml/Distributor/Grid.php
У класса, определенного в,
Grid.php
есть опечаткаисточник
Это
$this->_blockGroup
очень запутанное имя, но оно должно быть именем папки, а не модуля. В вашем случае я думаю, что это должно быть$this->_blockGroup = 'distributor';
Если вы посмотрите в
Mage_Currencysymbol_Block_Adminhtml_System_Currencysymbol
качестве примера, blockGroup - это имя папки, а не имя модуля в config.xml.источник
distributor_distributor
?Проверьте структуру папок еще раз, чтобы убедиться, что все файлы расположены по правильному пути.
В моем случае для этой проблемы файл был помещен в неправильное место. Я поместил
Grid.php
вcontroller/Adminhtml
папку скорее чтоBlock/Adminhtml/Grid.php
источник
Проверьте свой путь к файлу distributor.xml. Он должен быть помещен в app / design / adminhtml / default / default / layout / distributor.xml.
В коде, связанном с config.xml, который вы разместили, показано, что
а не это должно быть так
и файл должен быть помещен в app / design / adminhtml / default / default / layout / distributor.xml
Попробуйте сделать это, если это не ваш настоящий сценарий.
источник