Varien_Event_Observer getName () metodo restituisce null
-
16-10-2019 - |
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?
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.