2015-04-02 3 views
0

Это ситуация. Допустим, у меня есть форма, которая собирает имя, фамилию и адрес электронной почты, требуются все поля.PHP Исключения, ошибки и предоставление отзывов пользователей

Обычно я просто проверяю поле, если оно не установлено, а затем эхо-ошибка. Это хорошо и все, кроме меня, я хочу более элегантно обрабатывать вещи. Я читал о throw/try/catch, и я понимаю, как это сделать, но я не уверен, когда я буду использовать их.

Позвольте мне уточнить, что я хочу делать.

И опять у меня есть 3 поля:

  • Имя
  • Фамилия
  • Email

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

Я предположил, что throw/catch/try может это сделать, но я могу только выбросить 1 ошибку за раз. То, что я хотел бы сделать, это отобразить все ошибки пользователю сразу.

Я понимаю, что я мог бы быть вне базы здесь, но именно поэтому я прошу совета. В этой ситуации лучшая практика?

+0

«Я беру эти поля ... Имеют смысл?» - Весь этот параграф имеет смысл. Почему бы не написать код и не попробовать? – wavemode

ответ

0

Одно (возможно, слегка экстремальное) эмпирическое правило, которое я видел, заключается в том, что вы должны использовать Исключения, где вы были бы довольны выходом программы. Это неправда, если вы не поймаете исключения, вот что произойдет; но также подчеркивает мысль о том, что исключения не должны использоваться для «обычного бизнеса», контроля потока, ситуаций.

Как вы обнаружили, как только вы выкидываете исключение, вы взорваны из того, что вы делали, поэтому вы не можете создавать несколько исключений одновременно. Поэтому ваш лучший выбор для проверки - это просто создать массив ошибок - он не должен быть глобальным, просто верните его из метода проверки или как член объекта Validator.

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

Смежные вопросы