Estou entendendo setSaveParametersInSession() on a non-object
No módulo de administração, o caminho é
Training/Distributor/Block/Adminhtml/
nesta pasta eu tenho
Distributor/Grid.php
e 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();
}
}
Por que eu recebo esse erro?
Não vejo erros de digitação e tenho certeza que $ this -> _ blockGroup e $ this -> _ controller estão corretos.
Preciso procurar outras coisas? ou eu perdi alguma coisa?
Após uma pesquisa no google e na pilha, encontrei pessoas geralmente _blockGroup ou _controller, mas isso não parece ser o meu caso
===
EDITAR
===
<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
arquivo também.__construct
método em vez de_construct
.Respostas:
É difícil dizer com as informações que você forneceu, mas aqui está como eu depurava isso.
Você não mencionou em qual arquivo estava tendo esse problema, mas provavelmente é essa parte do contêiner da grade do widget base que é o seu problema
o que significa que o Magento está tentando instanciar a classe de bloco
Ou no seu caso
Por alguma razão, no seu sistema, o Magento não pode instanciar um objeto desse alias de classe, o que resulta no método de um erro que não é objeto.
Portanto, a primeira etapa é adicionar um código de depuração ao
_prepareLayout
para garantir que o
_blockGroup
e_controller
estão definidos corretamente.Supondo que sejam, agora você está apenas depurando uma pesquisa de classe normal. Tente executar o código a seguir para ver qual classe PHP Magento acha que deve usar para o alias de sua classe
Olhando para a sua configuração, isso deve ser algo como
Se
$class
estiver vazio ou falso, significa que há um erro no seuconfig.xml
arquivo. Você pode depurar isso saltando para ogetGroupedClassName
métodoEste é o método em que o Magento faz referência à configuração mesclada e extrai um nome de classe.
Finalmente, se
$class
faz conter um nome de classe, significa carregador automático de Magento não consegue encontrar sua classe. Tente instanciar essa classe diretamente (novamente, como um exercício de depuração)Você provavelmente receberá algum tipo de erro de classe não encontrado, ou porque
Sua turma não está no local adequado (
app/code/[codepool]/Training/Distributor/Block/Adminhtml/Distributor/Grid.php
A classe definida em
Grid.php
possui um erro de digitaçãofonte
O nome
$this->_blockGroup
é muito confuso, mas deve ser o nome da pasta e não o módulo. No seu caso, acho que deveria ser$this->_blockGroup = 'distributor';
Se você olhar
Mage_Currencysymbol_Block_Adminhtml_System_Currencysymbol
como exemplo, blockGroup é o nome da pasta e não o nome do módulo no arquivo config.xmlfonte
distributor_distributor
?Verifique a estrutura da pasta mais uma vez para garantir que todos os arquivos estejam localizados no caminho correto.
No meu caso para esse problema, o arquivo foi colocado no local errado. Eu coloquei a pasta
Grid.php
nacontroller/Adminhtml
vez queBlock/Adminhtml/Grid.php
fonte
Verifique seu caminho para o arquivo distributor.xml. Ele deve ser colocado em app / design / adminhtml / default / default / layout / distributor.xml.
No código relacionado ao config.xml que você postou, mostre que
ao invés disso, deve ser assim
e o arquivo deve ser colocado em app / design / adminhtml / default / default / layout / distributor.xml
Tente fazer isso se não for o seu cenário atual.
fonte