Domanda

Non capisco il motivo per cui l'oggetto Varien_Event_Observer ha getter e setter per esimo attributo 'nome'. Tuttavia quando lo si utilizza nel metodo definito dalla mia configurazione XML, chiamando getName () restituisce il valore null?

I sarebbe di prendere una supposizione che il nome del nodo univoco si utilizza nella configurazione XML deve essere utilizzato come nome dell'osservatore?

ad es.

 <events>
    <catalog_product_save_after>
        <observers>
            <my_special_unique_name>
                <type>singleton</type>
                <class>my_special/catalog_product_save_after_observer</class>
                <method>myMethod</method>
            </my_special_unique_name>
        </observers>
    </catalog_product_save_after>
</events>

public function myMethod($observer) {

    //Returns null , not what I would expect to be "my_special_unique_name"
    $observer->getName();

}

Mi sto perdendo qualcosa, era lì intenzione lì e non è mai stato aggiunto?

È stato utile?

Soluzione

Si ottiene un valore vuoto per il nome dell'osservatore perché il nome non è impostato. C'è da nessuna parte una linea come $observer->setName()
L'istanza osservatore creata Mage_Core_Model_App::duspatchEvent() e le sole operazioni effettuate con esso sono i seguenti:

//instantiate
$observer = new Varien_Event_Observer(); 

//set event details
$observer->setData(array('event'=>$event)); 

//call the needed method with the $observer as parameter
$this->_callObserverMethod($object, $method, $observer); 
//the line above is just a wrapper for $object->$method($observer);

Se si inietta da qualche parte tra il momento l'osservatore viene creata un'istanza e il tempo il metodo viene chiamato in questo modo:

$observer->setName('Mickey Mouse');

Si sarà in grado di ottenere il nome dell'osservatore nel metodo.

Il valore che ti aspettavi da restituire è in realtà il valore della $obsName variabili in questo pezzo di codice:

foreach ($eventConfig->observers->children() as $obsName=>$obsConfig) {
    $observers[$obsName] = array(
        'type'  => (string)$obsConfig->type,
        'model' => $obsConfig->class ? (string)$obsConfig->class : $obsConfig->getClassName(),
        'method'=> (string)$obsConfig->method,
        'args'  => (array)$obsConfig->args,
    );
} 

Questo tag viene utilizzato solo per essere in grado di avere osservatori diversi per lo stesso evento (diversi valori delle variabili) o essere in grado di sostituire un osservatore utilizzando nel vostro modulo di uno dei tag esistenti per un evento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top