Come attivare un evento solo su creazione del record e non su updation?
-
16-10-2019 - |
Domanda
Ho un modulo di griglia di amministrazione personalizzato. Quando aggiungo un elemento per quella griglia viene chiamato il saveAction () nel controller del mio modulo (ovviamente).
Ho bisogno di attivare un evento personalizzato dopo il record viene salvato (come mostrato qui sotto).
public function saveAction() {
if ($data = $this->getRequest()->getPost('tendor')) {
try {
$tendor = $this->_initTendor();
$tendor->addData($data);
$products = $this->getRequest()->getPost('products', -1);
if ($products != -1) {
$tendor->setProductsData(Mage::helper('adminhtml/js')->decodeGridSerializedInput($products));
}
$tendor->save();
// custom event to save vendor code
$evtData = array('tendor_info' => $data, 'tendor_instance' => $tendor);
Mage::dispatchEvent('my_custom_tendor_save_after', $evtData);
Ora voglio questo evento per essere attivato solo quando viene aggiunto un nuovo record e non quando il record esistente viene modificato.
Come posso trovare la differenza tra la creazione di registrazione e updation di un record?
Può qualcuno aiutarlo a capire questo fuori?
Soluzione
Hai questa linea nel vostro controller:
$tendor = $this->_initTendor();
posso solo supporre che questo prende il parametro id
da _GET
e carica l'entità appropriata dal db.
È possibile aggiungere questa riga a destra sotto la linea che ho citato:
$shouldDispatchEvent = !(bool)($tendor->getId());
$shouldDispatchEvent
è vero solo se l'oggetto $tendor
ha un id.
Ora avvolgere la dispatchEvent
in questo modo:
if ($shouldDispatchEvent){
$evtData = array('tendor_info' => $data, 'tendor_instance' => $tendor);
Mage::dispatchEvent('my_custom_tendor_save_after', $evtData);
}
[EDIT] .
Un altro modo di farlo, nel tuo caso potrebbe essere questo:
if ($tendor->isObjectNew()){
$evtData = array('tendor_info' => $data, 'tendor_instance' => $tendor);
Mage::dispatchEvent('my_custom_tendor_save_after', $evtData);
}
Questo funziona se il modello si estende Mage_Core_Model_Abstract
(e dovrebbe).
il _isObjectNew
membro viene aggiunto all'istanza modello nella _beforeSave
(vedi Mage_Core_Model_Abstract::_beforeSave()
) metodo, e dal momento che si desidera inviare il vostro evento dopo il salvataggio è fatto si dovrebbe essere in grado di accedervi.