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?

¿Fue útil?

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>.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top