Domanda

Tutti i seguenti metodi sono utilizzati nel nucleo Magento affermativo, qual è il preferito (o l'ultimo "best practice") modo?

  • Mage::throwException('Some Message') - 732 Usi
  • throw new Exception('Some Message') - 419 Usi
  • throw Mage::exception('Vendor_Module', 'Some Message') - 94 Usi
    (necessità di creare una classe Vendor_Module_Exception)
È stato utile?

Soluzione

Il Mage::throwException chiamata viene utilizzata per generare eccezioni della varietà specifica Mage_Core_Exception. Questi sono generalmente utilizzati per presentare i messaggi di errore per l'utente finale. Per esempi di questo, fare una rapida ricerca per Mage::throwException nel modulo Mage_Checkout, troverete molti casi in cui il messaggio di errore sia effettivamente tradotto prima che sia gettato, come è in ultima analisi, sta per essere aggiunto all'oggetto sessione e visualizzato all'utente sulla pagina risultante.

Utilizzando new Exception o qualcosa di simile new My_Custom_Exception sarebbe normalmente in cui si sta gettando errori interni per l'applicazione, errori che molto probabilmente non dovrebbe mai essere visualizzati per l'utente finale. Forse si cattura questi e gestire con grazia (buon uso per un tipo di eccezione personalizzata in alcuni casi), o altre volte finiscono fuori pescato, il login e terminare la richiesta con un messaggio di errore più generico viene visualizzato all'utente.

Non ho mai usato personalmente Mage::exception ma sembra essere un tentativo di avere un modello tipo di eccezione unica per ogni modulo. Non ci sarebbe niente di male a usarlo, in quanto è essenzialmente una fabbrica che restituisce un'istanza un'eccezione per il modulo dato, anche se (al momento della stesura di questo) non implementa alcun supporto per cose come sostituzioni.

Altri suggerimenti

Hai fatto la parte più difficile, scoprire quanto spesso vengono usati:)

tl; dr: IMHO, è necessario utilizzare Mage::throwException il più delle volte, per poi tornare ad Mage::exception quando è necessario sollevare un tipo di eccezione al di fuori del campo di applicazione del modulo, se per nessun altro motivo che la capacità di messaggistica sessione e il fatto che non è necessario digitare throw new di fronte ad esso.

Ecco la ripartizione:

  • Mage::throwException è essenzialmente un wrapper per Mage_Core_Exception($message) con le funzionalità aggiuntive di essere in grado di aggiungere l'eccezione a una sessione tramite una chiamata getSingleton concatenato con addMessage
  • new Exception() è il modo più core di PHP per generare un'eccezione, ma richiede di utilizzare la parola chiave throw ed è probabilmente la più piccola grande più "performante", come gli altri due sono gli involucri con funzionalità extra.
  • Come accennato, Mage::exception è un wrapper pure, ma ha il vantaggio di permettere di un'istanza la propria classe eccezione. Si tratta di veramente utile se sei uno sviluppatore del plugin e necessità di fare i registri personalizzati per eccezioni, separatamente, senza la funzionalità che fornisce logException (ad esempio, senza pila trac) o desidera effettuare una chiamata API su eccezione, ecc E 'anche utile quando si desidera throw un'eccezione di un tipo di classe diversa, per esempio, ciò che accade in Mage_Paypal, alzando spesso un tipo di eccezione Mage_Core.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top