Начну с того, что про стандарт PSR-3 и библиотеку monolog я знаю. Проект сам достаточно большой, так что, думаю, эта библиотека хорошо подойдёт. Но некоторые моменты всё равно не понятны.
Например, взять регистрацию/авторизацию (или другую обработку пользовательских данных). Раньше все ошибки ввода (например ошибки валидации) записывались в суперглобальный массив $_SESSION, далее делался редирект на ту же страницу для очистки POST данных (что бы по F5 нельзя было отправить форму ещё раз), потом выводили ошибки в шаблон и очищали сессию, что бы ошибки не маячили всё время. Сейчас начал обращать внимание, что в некоторых статьях/видео/книгах подобного рода ошибки засовывают в исключения, а юзеру просто показываются текст из этого исключения.
- Нормальная ли эта практика?
- Как в этом подходе обстоят дела с очисткой формы от POST?
- Подходит ли именно для этой задачи библиотека monolog или она только для журналирования, но не предназначена для вывода ошибок юзерам?
- Небольшое отступление в вопросе, но ещё в разных местах пишут/говорят по разному о том в каком месте валидировать данные: контроллер, модель или отдельный компонент?
- Если в контроллере валидировать данные, то где их тогда перехватывать в случае исключений? Я так предполагаю, что это лучше делать в отдельном компоненте, а перехватывать уже в контроллере?
Так же интересует практика журналирования ошибок/нестандартных ситуаций/и других простых событий в проекте. Тут понятно, что monolog, вроде как, подходит, но не совсем ясно, как это надо совмещать с механизмом исключений? Могу предположить, что при возможной ошибке бросается исключение и ниже эта же ошибка логируется через библиотеку? Или тут должен быть другой механизм?
Ну и последний вопрос, который, наверное, относится к категории личных практик. Как вы вообще организуете логирование на вашем сайте/проекте? То есть какие ошибки пишите в логи, какие по email, может ещё используете какие-то способы доставки. Если у вас идёт запись в лог файлы, то какую структуру каталогов и самого лог файла делаете в зависимости от типа ошибки/сообщения? Тут интересуют именно лучшие практики.
Спасибо за внимание.