Conexão do Módulo Externo de Banco de dados falha ao executar Recurso
-
12-12-2019 - |
Pergunta
Tenho seguido http://www.solvingmagento.com/accessing-an-external-database-from-your-magento-module/ e artigos de Alan Tempestade e estou preso em conexão de um Módulo para Magento um banco de dados externo.[Mage/Core versão 1.6 neste projeto].
Eu acho que a configuração parece correto, mas eu não pode obter dados para a tela.Em vez disso, o real código php está sendo exibido.Especificamente, toda a classe de Recurso está sendo exibido.
Aqui é relevante controller, model, modelo de recursos, e config trecho.Eu não estou certo de que o modelo de Recursos que deve ser estendido, que pode ser o problema, mas talvez haja alguma coisa também?
O Meu Controlador
public function indexAction()
{
echo "<h1> Connecting Magento to Developer Store! </h1>";
$externalDataRead = Mage::getModel('developer_integration/customer');
$externalDataRead->load(1, 'user_id');
echo '<pre>';
print_r($externalDataRead->getData());
echo '</pre>';
}
O Meu Modelo
class Developer_Integration_Model_Customer extends Mage_Core_Model_Abstract
{
protected function _construct()
{
$this->_init('developer_integration/customer');
}
}
O Meu Modelo De Recursos
class Developer_Integration_Model_Resource_Customer extends Mage_Core_Model_Resource_Type_Db_Pdo_Mysql
{
protected function _construct()
{
$this->_init('developer_integration/customer', 'user_id');
}
}
Meu config.xml (isto pode não ser bem-formatado aqui, mas está no arquivo)
<models>
<developer_integration><!-- name of the model configuration-->
<class>Developer_Integration_Model</class><!-- path where to look for model classes for-->
<resourceModel>developer_integration_resource</resourceModel><!-- pointer to the resource model configuration node-->
</developer_integration>
<developer_integration_resource><!-- resource model configuration name -->
<class>Developer_Integration_Model_Resource</class><!-- path where to look for resource model classes for -->
<entities><!-- entities list -->
<customer><!-- our test entity -->
<table>dev_customer</table><!-- name of the external table to store data for our entity -->
</customer>
</entities>
</developer_integration_resource>
</models>
<resources>
<developer_integration_setup><!-- name of the external db connection -->
<connection>
<host><![CDATA[localhost]]></host>
<username><![CDATA[devuser]]></username>
<dbname><![CDATA[dev_store]]></dbname>
<type><![CDATA[pdo_mysql]]></type>
<active>1</active>
</connection>
</developer_integration_setup>
<developer_integration_write><!-- connection used for write access -->
<connection>
<use>developer_integration_setup</use>
</connection>
</developer_integration_write>
<developer_integration_read><!-- connection used for read access -->
<connection>
<use>developer_integration_setup</use>
</connection>
</developer_integration_read>
</resources>
Solução 2
Bem, a resposta para isso é manter a quebra do modelo de recursos e até pode-se acionar o azul magento tela de erro ou algo assim - de modo que você pode dizer que os erros que estão a bater há no interior do Recurso.
No meu caso, eu achei que fazer o meu Recurso ampliar class Mage_Core_Model_Resource_Db_Abstract
accionado um erro de execução.Enquanto que parecia ser um sinal de que o meu Recurso foi estendendo-se o Recurso errado Modelo, na verdade, era um sinal de que eu estava estendendo o correto Modelo de Recursos.
Vale a pena notar que o Magento api do google docs em http://docs.magentocommerce.com/index.html não lista a Mage_Core_Model_Resource_Db_Abstract
.O Mage_Core_Model_Resource_Abstract está listado, como é Mage_Core_Model_Resource, mas Mage_Core_Model_Resource_Db_Abstract
não é.A única razão que eu estava disposto a repetir que a classe foi porque ele foi listado na solvingmagento.com tutorial.Eu também poderia ter grep ed para a classe dentro do meu instalação e descobriu que ele existia.
Então, que pelo menos leva para o problema, agravado por api acima ausência...em algum momento, no meio da minha hacking volta, tirei o <password>
nó de minha conexão, porque o meu local dev senha está vazia.No entanto, quando o xml é analisado pelo Magento, é apresentada coordenadas para ter esse campo presente.Ele se transforma em <password />
dentro da configuração de conexão e é necessário [Outro ponto de falta do magento configuração do wiki].
Se mais alguém tem esse problema - talvez esta informação irá reduzir o tempo de ervas daninhas.Melhor para todos.
Outras dicas
Substituir os Modelos de Recursos e tags com este:
<models>
<developer_integration><!-- name of the model configuration-->
<class>Developer_Integration_Model</class><!-- path where to look for model classes for-->
<resourceModel>developer_integration_mysql4</resourceModel><!-- pointer to the resource model configuration node-->
</developer_integration>
<developer_integration_mysql4><!-- resource model configuration name -->
<class>Developer_Integration_Model_Mysql4</class><!-- path where to look for resource model classes for -->
<entities><!-- entities list -->
<customer><!-- our test entity -->
<table>dev_customer</table><!-- name of the external table to store data for our entity -->
</customer>
</entities>
</developer_integration_mysql4>
</models>
<resources>
<developer_integration_setup><!-- name of the external db connection -->
<connection>
<host><![CDATA[localhost]]></host>
<username><![CDATA[devuser]]></username>
<dbname><![CDATA[dev_store]]></dbname>
<type><![CDATA[pdo_mysql]]></type>
<active>1</active>
</connection>
</developer_integration_setup>
<developer_integration_write><!-- connection used for write access -->
<connection>
<use>core_write</use>
</connection>
</developer_integration_write>
<developer_integration_read><!-- connection used for read access -->
<connection>
<use>core_read</use>
</connection>
</developer_integration_read>
</resources>