我正在创建一个模块(我的第一个模块,没有教程)并收到错误
'无法检索实体配置'
在浏览各种网站并尝试不同的选择后,我停下来了。我从完整的信息中假设:Error in file: "/Users/myname/Sites/magentotest/app/code/local/Ps/Pref/sql/pref_setup/mysql4-install-0.1.0.php" - Can't retrieve entity config: pref/prefNewsSignUp
问题出在我的config.xml上,我需要在某处添加一个实体节点,其中包含与mysql4有关的内容.....但我需要添加的内容以及我需要放在该节点中的内容仍然存在这是我的一个谜。我的配置文件是
<global>
<model>
<pref>
<class>Ps_Pref_Models</class>
</pref>
</model>
<resources>
<pref_setup>
<setup>
<module>Ps_Pref</module>
<class>Ps_Pref_Models_Resource_Setup</class>
</setup>
</pref_setup>
</resources>
</global>
==============================的修改 ====== =======================
我现在回到教程阶段试图了解我哪里出错了。 this Alan Storm tutorial似乎与我的目标非常相似,但我仍然遇到了“无法检索实体配置”的相同问题(我已经完成了我在IndexController中的所有配置和var_dumped各种选项,但是不能得到了问题,这对我没有任何意义)我留下了一些我觉得有用的var_dump以及他们返回的内容(我希望这个编辑不会太混乱)
文件夹结构
+诗
- + Prefcentre
- +模型
--- + Mysql4
---- Preferences.php
--- Preferences.php
- +控制器
--- IndexController.php
- +等
--- config.xml中
PS / Prefcentre /型号/ Mysql4 /选择
class Ps_Prefcentre_Model_Mysql4_Preferences
extends Mage_Core_Model_Mysql4_Abstract
{
protected function _construct()
{
$this->_init('prefcentre/preferences', 'prefcentre_id');
}
}
PS / Prefcentre /型号/选择
class Ps_Prefcentre_Model_Preferences
extends Mage_Core_Model_Abstract
{
protected function _construct()
{
$this->_init('prefcentre/preferences');
}
}
PS / Prefcentre /索引控制器
class Ps_Prefcentre_IndexController
extends Mage_Core_Controller_Front_Action
{
public function indexAction()
{
$params = $this->getRequest()->getParams();
$prefs = Mage::getModel('prefcentre/preferences');
echo ("Loading the blogpost with an Id of " . $params['id']);
$prefs->load($params['id']);//returns "Can't retrieve entity config"
// $prefs->getData('title');//returns array(0)
$data = $prefs->getData();
var_dump($data);
// $pref = Mage::getModel('prefcentre/preferences');
// echo get_class($pref);//returns Ps_Prefcentre_Model_Preferences
}
}
PS / Prefcentre的/ etc / config.xml中
<config>
<global>
<!--....-->
<models>
<prefcentre>
<class>Ps_Prefcentre_Model</class>
<resourceModel>prefcentre_mysql4</resourceModel>
</prefcentre>
<prefcentre_mysql4>
<class>Ps_Prefcentre_Model_Mysql4</class>
<entities>
<prefcentre>
<table>prefcentre</table>
</prefcentre>
</entities>
</prefcentre_mysql4>
</models>
<resources>
<prefcentre_write>
<connection>
<use>core_write</use>
</connection>
</prefcentre_write>
<prefcentre_read>
<connection>
<use>core_read</use>
</connection>
</prefcentre_read>
</resources>
<!--....-->
</global>
</config>
答案 0 :(得分:8)
您缺少表名引用。在某处您使用句柄pref/prefNewsSignUp
指定了一个表名,但您没有提供必要的xpath。你有资源模型节点吗?你有适当的xpath和文本吗?
<global>
<model>
<pref>
<class>Ps_Pref_Models</class>
<resourceModel>pref_resource</resourceModel>
</pref>
<pref_resource>
<class>Ps_Pref_Models_Resource</class>
<entities>
<prefNewsSignUp><table>table_name</table></prefNewsSignUp>
</entities>
</pref_resource>
</model>
答案 1 :(得分:2)
我有类似的问题,我的解决方案是替换下面的代码:
public function indexAction()
{
$params = $this->getRequest()->getParams();
$prefs = Mage::getModel('prefcentre/preferences');
....
的
public function indexAction()
{
$params = $this->getRequest()->getParams();
$prefs = Mage::getModel('ps_prefcentre/preferences');
....
就是这样,通过添加我得到它的模型前缀。
答案 2 :(得分:1)
<model>
<pref>
<class>Ps_Pref_Models</class>
</pref>
</model>
不应该是:
<models>
<pref>
<class>Ps_Pref_Model</class>
</pref>
</models>