Сообщения об исключениях в PHP - PullRequest
2 голосов
/ 13 октября 2011

Обычно приложение PHP имеет пользовательский интерфейс. В многоуровневом приложении MVC вы можете выбросить некоторые исключения.

Какой тип сообщения вы задаете в исключении:

A)

  • пользовательское сообщение для отображения пользователю
  • и вы регистрируете ошибку с техническими деталями, прежде чем выбросить ее

В)

  • пользовательская техническая ошибка и пользовательское исключение
  • нет регистрации рядом с исключением
  • перехватить исключение, зарегистрировать ошибку и отобразить пользовательское сообщение, основанное на типе исключения

C) другие варианты

Ответы [ 4 ]

2 голосов
/ 13 октября 2011

Пользователи не должны видеть никаких ошибок или исключений вообще.

Если что-то пойдет не так, зарегистрируйте его, возможно, отправьте его самому себе, но не показывайте его пользователю, просто продолжайте, как будто ничего не произошло

Вот почему на производственных сайтах выдается сообщение об ошибке об ошибке

1 голос
/ 17 октября 2011

Общая практика

C - Вы должны записывать обратный след только при возникновении ошибки, потому что вы не сможете ее восстановить. Вы ловите сообщение об ошибке внутри своего класса Application, а затем в зависимости от настройки выводите на экран сообщение или регистрируете его и отображаете какой-то общий экран для пользователя.

При регистрации ошибки добавить дополнительную информацию , такую ​​как версия браузера, IP-адрес, запрошенный URL.

Удобные сообщения

Внутри моих моделей я иногда выкидываю исключения типа «ForUser». Они не записывают обратную трассировку, и когда они попадают в класс приложения, они отображаются пользователю. Существует несколько подклассов исключений, таких как проверка, логика и т. Д.

Перебрасывание исключений

Некоторые элементы пользовательского интерфейса обнаруживают исключения, чтобы правильно отображать их, например, отправка формы вызовет Model-> update (), перехватывает исключения проверки и показывает их для соответствующего поля внутри моей формы Ajax.

1 голос
/ 13 октября 2011

Б - Я бы так и сделал.Существует дальнейшее рассмотрение вокруг ajax и выдачи исключений.Если у вас богатый пользовательский интерфейс с большим количеством javascript, я рекомендую, чтобы вы выдавали разные исключения с разными кодами состояния (ответы http), а затем отображали разные сообщения в зависимости от этих ответов.Исключение по-разному в разных средах.В процессе разработки вы можете отобразить исключение и отобразить трассировку стека.

В режиме реального времени вы можете отобразить страницу 404 или перехватить все 500 страниц для всех исключений.

0 голосов
/ 21 октября 2011

Исключения и ошибки предназначены только для разработчиков (или других приложений, взаимодействующих с вашим приложением)

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

В среде разработки вы увидите полное сообщение об исключении и обратный след.

В производственном процессе обработчик превращает исключение в удобное для пользователя сообщение снет чувствительных деталей вообще.Возможно, вы хотите, чтобы они знали, что «что-то пошло не так», и вы хотите, чтобы это сообщение было встроено в тот же макет, который вы используете для остальной части вашего сайта.Попробуйте перейти на любой достойный сайт и сделать что-то не так, например, перейти на несуществующий URL.Вы, вероятно, найдете симпатичную страницу 404 вместо «исключение: URL-адрес не существует» или что-то в этом роде.

Кроме того, вы можете захотеть разные уровни регистрации ошибок в зависимости от среды, в которой вы находитесь.хочу регистрировать все ошибки, предупреждения, информационные сообщения, сообщения об отладке.В производственной среде вы можете захотеть регистрировать только ошибки (и, возможно, предупреждения).

Настройка всего этого может быть очень сложной.Вот почему у нас есть рамки для решения подобных задач.Вам стоит попробовать Symfony 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...