Me estoy poniendo setSaveParametersInSession() on a non-object
Está en un módulo de administración, la ruta es
Training/Distributor/Block/Adminhtml/
en esta carpeta tengo
Distributor/Grid.php
y 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 qué recibo este error?
No puedo ver ningún error tipográfico y estoy seguro de que $ this -> _ blockGroup y $ this -> _ controller son correctos.
¿Hay otras cosas que necesito buscar? o me he perdido algo?
Después de una búsqueda en google y stack, he encontrado personas generalmente _blockGroup o _controller, pero este no parece ser el caso para mí
===
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
archivo también.__construct
método en lugar de_construct
.Respuestas:
Es difícil decirlo con la información que proporcionó, pero así es como depuraría esto.
No mencionó en qué archivo estaba teniendo este problema, pero probablemente sea esta parte del contenedor de la cuadrícula de widgets base ese sea su problema
lo que significa que Magento está tratando de instanciar la clase de bloque
O en tu caso
Por alguna razón, en su sistema, Magento no puede crear instancias de un objeto de este alias de clase, lo que da como resultado que el método tenga un error que no sea de objeto.
Entonces, el primer paso es agregar un código de depuración a
_prepareLayout
para asegurarse de que
_blockGroup
y_controller
estén configurados correctamente.Suponiendo que lo sean, ahora solo está depurando una búsqueda de clase normal. Intente ejecutar el siguiente código para ver qué clase de PHP Magento cree que debería usar para su alias de clase
Echando un vistazo a su configuración, esto debería ser algo así como
Si
$class
está vacío o es falso, significa que tiene un error en suconfig.xml
archivo. Puede depurar esto saltando algetGroupedClassName
método.Este es el método donde Magento hace referencia a la configuración fusionada y extrae un nombre de clase.
Por último, si
$class
lo hace contener un nombre de clase, significa cargador automático de Magento no puede encontrar su clase. Intente crear instancias de esta clase directamente (nuevamente, como un ejercicio de depuración)Probablemente obtendrá algún tipo de error de clase no encontrada, ya sea porque
Tu clase no está en la ubicación adecuada (
app/code/[codepool]/Training/Distributor/Block/Adminhtml/Distributor/Grid.php
La clase definida en
Grid.php
tiene un error tipográficofuente
El
$this->_blockGroup
es un nombre muy confuso, pero debe ser el nombre de la carpeta y no el módulo. En tu caso, creo que debería ser$this->_blockGroup = 'distributor';
Si observa
Mage_Currencysymbol_Block_Adminhtml_System_Currencysymbol
como ejemplo, blockGroup es el nombre de la carpeta y no el nombre del módulo en config.xmlfuente
distributor_distributor
?Verifique la estructura de su carpeta una vez más para asegurarse de que todos los archivos estén ubicados en la ruta correcta.
En mi caso para este problema, el archivo se colocó en una ubicación incorrecta. Coloqué la carpeta
Grid.php
encontroller/Adminhtml
lugar de esoBlock/Adminhtml/Grid.php
fuente
Verifique su ruta al archivo distribuidor.xml. Debe colocarse en app / design / adminhtml / default / default / layout / distributor.xml.
En el código relacionado con config.xml que publicaste, muestra que
en lugar de esto debería ser así
y el archivo debe colocarse en app / design / adminhtml / default / default / layout / distributor.xml
Intente hacer esto si no es su escenario actual.
fuente