В ядре Joomla я нахожу еще много таких звонков:
// Check for errors.
if (count($errors = $this->get('Errors')))
{
JError::raiseError(500, implode("\n", $errors));
return false;
}
Но JError устарела с момента выпуска Платформы 12.1. Так как я должен использовать стандартные исключения PHP.
php
error-handling
jerror
Харальд Лейтнер
источник
источник
Ответы:
Как сказал @DmitryRekun, хорошее обсуждение здесь . Ключевым моментом, который необходимо учитывать во всем этом, является тип ошибки, которая у вас возникает?
Есть два типа ошибок:
Разницу я склоняюсь к следующему:
Теперь, когда мы знаем, с чем имеем дело. Что вы должны сделать?
Если ошибка не устраняется, вы хотите перенаправить их на страницу ошибки, а не переходить на запрошенную страницу . Это так же просто, как следующее:
Exception
это класс, который принимает два параметра, сообщение и код. Рекомендуется использовать коды ответов HTTP, если они соответствуют вашему сценарию.Если ошибка исправима, вы, скорее всего, просто захотите отобразить сообщение обратно конечному пользователю, продолжая показывать ему запрашиваемую страницу. Обычно это означает, что вы должны «поставить в очередь» сообщение для приложения:
enqueueMessage
принимает два параметра: сообщение об ошибке и тип сообщения. Более подробная информация здесь (внизу).Существует также третья ситуация, которая встречается довольно часто для меня, по крайней мере. Joomla будет генерировать исключения для разных ошибок (например, ошибка запроса к базе данных). Это означает, что Joomla считает эту ошибку невосстановимой. Тем не менее, вы можете продолжить в любом случае. (Например, если я изменяю таблицу при обновлении своего расширения, я могу просто выполнить
ALTER
запрос, который выдаст исключение, если таблица была ранее изменена.)В этом случае вы хотите обернуть код, который может вызвать исключение, в секции try ... catch:
Обратите внимание, что вы «ловите» неисправимую ошибку и заставляете систему восстанавливаться и продолжать показывать запрошенную страницу.
Добавьте все это, и ваш случай должен быть неисправимой ошибкой. (Я знаю это, потому что впоследствии у вас есть «return false», так что вы, вероятно, не планируете продолжать и разочаровываетесь в этой функции.)
Таким образом, я бы переписал это следующим образом:
источник
$this->get('Errors')
потому что это также устарело.JDEBUG
естьtrue
.Вот как я справляюсь с ошибками.
Просмотр или контроллер
Так что, если я получу код 404 от моей модели (например):
Затем я ловлю его в представлении или контроллере и выкидываю еще одно исключение, которое будет обрабатывать Joomla и отображать страницу 404. Для любого другого я просто показываю пользователю какое-то общее сообщение об ошибке.
Также прочитайте эту интересную дискуссию об обработке ошибок.
источник
Большинство таких блоков кода можно просто заменить,
enqueueMessage
поскольку они на самом деле не воздействуют на ошибку, а просто используютJError
для их распечатки.источник