Каков предпочтительный способ бросить исключения в Magento?

magento.stackexchange https://magento.stackexchange.com/questions/6674

  •  16-10-2019
  •  | 
  •  

Вопрос

Все следующие методы используются в ядре Magento, так какой из них является предпочтительным (или последним способом «лучшей практики»)?

  • Mage::throwException('Some Message') - 732 использования
  • throw new Exception('Some Message') - 419 использования
  • throw Mage::exception('Vendor_Module', 'Some Message') - 94 использования
    (нужно создать Vendor_Module_Exception учебный класс)
Это было полезно?

Решение

Звонок Mage::throwException используется, чтобы добавить исключения конкретных Mage_Core_Exception разнообразие. Обычно они используются для представления сообщений об ошибках конечному пользователю. Для примеров этого, сделайте быстрый поиск Mage::throwException В модуле MAGE_CHECKOUT вы найдете много случаев, когда сообщение об ошибке фактически переводится до его брошенного, так как оно в конечном итоге будет добавлено в объект сеанса и отображается пользователю на полученной странице.

С использованием new Exception или что -то вроде new My_Custom_Exception Обычно будет то, где вы бросаете ошибки внутренними в приложение, ошибки, которые, скорее всего, никогда не должны отображаться конечному пользователю. Возможно, вы поймаете их и обрабатываете их изящно (хорошее использование для пользовательского типа исключений в некоторых случаях), или в других случаях они заканчивают пойманными, регистрировали и завершают запрос с более общим сообщением об ошибке, отображаемому пользователю.

Я никогда не использовал лично Mage::exception Но это, по -видимому, является попыткой сэмплекса с уникальным типом исключений для каждого модуля. При использовании его не пострадала, так как это, по сути, фабрика, которая возвращает экземпляр исключения для данного модуля, хотя (на момент написания этой статьи) он не оказывает никакой поддержки для таких вещей, как переопределение.

Другие советы

Вы сделали сложную часть, выяснив, как часто они используются :)

TL; DR: ИМХО, вы должны использовать Mage::throwException чаще всего возвращается к Mage::exception Когда вам нужно поднять тип исключения из -за пределов объема вашего модуля, если по какой -либо другой причине, кроме способности обмена сеансами и тот факт, что вам не нужно печатать throw new перед ним.

Вот срыв:

  • Mage::throwException По сути, это обертка для Mage_Core_Exception($message) с дополнительной функцией возможности добавить исключение из сеанса через getSingleton Позвоните в цепью с addMessage
  • new Exception() это основной способ PHP, чтобы сделать исключение, но требует от вас использовать throw Ключевое слово и, вероятно, является малейшим большим более «исполнительским», поскольку два других являются обертками с дополнительной функциональностью.
  • Как уже упоминалось, Mage::exception это также обертка, но имеет преимущество, что позволяет вам создать свой собственный класс исключений. Это Действительно полезно Если вы разработчик плагинов и вам нужно делать пользовательские журналы для исключений, отдельно, без функциональности, которые logException обеспечивает (например, нет стека Trac) или хочет сделать вызов API на исключение и т. Д. Это также удобно, когда вы хотите throw Например, исключение различного типа класса, что происходит в Mage_Paypal, часто поднимая Mage_Core Тип исключения.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top