Falló abriendo 'Mago/Sync/Model/Observer.php' para su inclusión
-
16-10-2019 - |
Pregunta
Estoy tratando de hacer una extensión que contenga un observador.
Pero Magento busca el modelo en mago en lugar de mi extensión local "prueba". System.log me dice:
Falló abriendo 'Mago/Sync/Model/Observer.php' para su inclusión
Mi /app/code/local/Test/Sync/etc/config.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Test_Sync>
<version>0.0.1</version>
</Test_Sync>
</modules>
<global>
<models>
<test>
<class>Test_Sync_Model</class>
</test>
</models>
</global>
<frontend>
<events>
<sales_order_save_commit_after>
<observers>
<test_sales_order_save_commit_after>
<type>singleton</type>
<class>sync/observer</class>
<method>export</method>
</test_sales_order_save_commit_after>
</observers>
</sales_order_save_commit_after>
</events>
</frontend>
</config>
/app/code/local/Test/Sync/Model/Observer.php
class Test_Sync_Model_Observer {
public function export($observer)
{
// code
}
}
Revisé el acceso al archivo y borra todos los cachés.
¿Por qué no usa mi observador?
Solución
El problema hasta ahora no está realmente relacionado con el mecanismo del observador. Es un problema más básico.
Cuando Magento intenta cargar archivos como Mage/Yourmodule/Model/Foo.php
, esto indica que la búsqueda del código de clase Magento (es decir sync/observer
o yourmodule/foo
para mi ejemplo) en Mage::getModel()
(Magento llama getModel()
internamente al inicializar el observador) no funcionó correctamente.
El código que se escribirá en el <class> ... </class>
El nodo sigue la misma lógica que la pasaría a getModel()
.
Lo que hiciste es definir un mapeo de test
-> Test_Sync_Model
. Entonces si usas
<class>test/observer</class>
Magento debe usar adecuadamente Test_Sync_Model_Observer
.
Pero en realidad podría haber tenido la intención de definir el alias test_sync
(que es más común). Entonces, en la sección de modelos debe ser <test_sync>
y en el observador <class>test_sync/observer</class>
.