Error fatal:Error no detectado:Llamada a una función miembro getCollection() en booleano
-
29-09-2020 - |
Pregunta
Tengo un problema cuando crea modelo de datos lección 3/test/block/monblock.php
<?php
class Lesson3_Test_Block_Monblock extends Mage_Core_Block_Template
{
public function methodblock()
{
$retour='';
/* we are doing the query to select all elements of the pfay_test table (thanks to our model test/test and we sort them by id */
$collection = Mage::getModel('test/test')->getCollection()->setOrder('id_celebes','asc');
/* then, we check the result of the query and with the function getData() */
foreach($collection as $data)
{
$retour .= $data->getData('name').' '.$data->getData('surename').' '.$data->getData('phone').'<br />';
}
//i return a success message to the user thanks to the Session.
Mage::getSingleton('adminhtml/session')->addSuccess('Congratulation !!');
return $retour;
}
}
Lección3/Prueba/etc/config.xml
<?xml version="1.0"?>
<config>
<modules>
<Lesson3_Test>
<version>1.0.0</version>
</Lesson3_Test>
</modules>
<frontend>
<routers>
<lesson3>
<use>standard</use>
<args>
<module>Lesson3_Test</module>
<frontName>lesson3</frontName>
</args>
</lesson3>
</routers>
<layout>
<updates>
<lesson3>
<file>lesson3.xml</file>
</lesson3>
</updates>
</layout>
</frontend>
<global>
<blocks>
<lesson3>
<class>Lesson3_Test_Block</class>
</lesson3>
</blocks>
<models>
<lesson3>
<class>Lesson3_Test_Model</class>
<resourceModel>Test_mysql4</resourceModel>
</lesson3>
<lesson3_mysql4>
<class>Lesson3_Test_Model_Mysql4</class>
<entities>
<test>
<table>celebes</table>
</test>
</entities>
</lesson3_mysql4>
</models>
<!-- allow the plugin to read and write -->
<resources>
<!-- connection to write -->
<lesson3_write>
<connection>
<use>core_write</use>
</connection>
</lesson3_write>
<!-- connection to read -->
<lesson3_read>
<connection>
<use>core_read</use>
</connection>
</lesson3_read>
</resources>
</global>
</config>
Lección3/Prueba/controladores/IndexController.php
<?php
class Lesson3_Test_IndexController extends Mage_Core_Controller_Front_Action
{
public function indexAction()
{
$this->loadLayout();
$this->renderLayout();
Zend_Debug::dump($this->getLayout()->getUpdate()->getHandles());
}
public function testAction()
{
echo 'test mymethod';
}
}
Lección3/Prueba/Modelo/Prueba.php
<?php
class Lesson3_Test_Model_Test extends Mage_Core_Model_Abstract
{
public function _construct()
{
parent::_construct();
$this->_init('test/test');
}
}
Lección3/Prueba/Modelo/Mysql4/Test.php
<?php
class Lesson3_Test_Model_Mysql4_Test extends Mage_Core_Model_Mysql4_Abstract
{
public function _construct()
{
$this->_init('test/test', 'id_celebes');
}
}
Lección3/Prueba/Modelo/Mysql4/Prueba/Collection.php
<?php
class Celebes_Lesson3_Test_Model_Mysql4_Test_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
{
public function _construct()
{
parent::_construct();
$this->_init('test/test');
}
}
Solución 2
I found the problem on config
<resourceModel>Test_mysql4</resourceModel>
.
I change it with this <resourceModel>test_mysql4</resourceModel>
and its work
Otros consejos
declaraste tus modelos así:
<models>
<lesson3>
<class>Lesson3_Test_Model</class>
<resourceModel>Test_mysql4</resourceModel>
</lesson3>
<lesson3_mysql4>
<class>Lesson3_Test_Model_Mysql4</class>
<entities>
<test>
<table>celebes</table>
</test>
</entities>
</lesson3_mysql4>
</models>
esto significa que el alias de los modelos es lesson3
(la primera etiqueta debajo <models>
).
Entonces necesitas crear una instancia de tus modelos de esta manera:
Mage::getModel('lesson3/model_name_here');
En su caso, en lugar de
$collection = Mage::getModel('test/test')->getCollection()....
necesitas usar
$collection = Mage::getModel('lesson3/test')->getCollection()....
También reemplazar en Lesson3_Test_Model_Mysql4_Test
este
$this->_init('test/test', 'id_celebes');
con este
$this->_init('lesson3/test', 'id_celebes');
y en Celebes_Lesson3_Test_Model_Mysql4_Test_Collection
y Lesson3_Test_Model_Test
este
$this->_init('test/test');
con este
$this->_init('lesson3/test');
O, en lugar de todo lo anterior, puedes reemplazarlo en config.xml
la etiqueta <lesson3>
bajo <models>
y <blocks>
con <test>
.
[EDITAR]
<resourceModel>Test_mysql4</resourceModel>
debiera ser <resourceModel>lesson3_mysql4</resourceModel>