save() обработка ошибок
-
- Сообщения: 143
- Зарегистрирован: 2014.08.13, 15:08
save() обработка ошибок
Добрый день.
Хочу понять как правильно обрабатывать ошибки при сохранении AR модели, в случае, если модель создается в коде и заполняется там же, без получения пользовательских данных из формы (данные берутся из соц. сети).
Я так понимаю, если сохранение такой модели не прошло, значит проблема либо с самой БД (к примеру, сервер БД на секудну отвалился в момент записи), либо с данными которые туда пишут (не прошли валидацию или просто вызвали ошибку БД), а так как пользователь один фиг повлиять на процесс не может, показывать ошибки валидации ему нет смысла. Значит нужно выкинуть Exception.
1. Кстати какой это должен быть Exception?
2. И правильно ли я рассуждаю?
Хочу понять как правильно обрабатывать ошибки при сохранении AR модели, в случае, если модель создается в коде и заполняется там же, без получения пользовательских данных из формы (данные берутся из соц. сети).
Я так понимаю, если сохранение такой модели не прошло, значит проблема либо с самой БД (к примеру, сервер БД на секудну отвалился в момент записи), либо с данными которые туда пишут (не прошли валидацию или просто вызвали ошибку БД), а так как пользователь один фиг повлиять на процесс не может, показывать ошибки валидации ему нет смысла. Значит нужно выкинуть Exception.
1. Кстати какой это должен быть Exception?
2. И правильно ли я рассуждаю?
Re: save() обработка ошибок
Если будет проблема с БД, то вылетит PDOException.
А так какое подойдёт по смыслу из http://php.net/manual/ru/spl.exceptions.php
А так какое подойдёт по смыслу из http://php.net/manual/ru/spl.exceptions.php
-
- Сообщения: 143
- Зарегистрирован: 2014.08.13, 15:08
Re: save() обработка ошибок
Выходит что при любом раскладе будет PDOException... А что увидит пользователь при такой ошибке на продакшене? (я прост не умею переключать environments)
Re: save() обработка ошибок
500 Internal Server Error
-
- Сообщения: 143
- Зарегистрирован: 2014.08.13, 15:08
Re: save() обработка ошибок
Спасибо!
-
- Сообщения: 50
- Зарегистрирован: 2017.03.06, 15:37
- Откуда: Владивосток
Re: save() обработка ошибок
try... catch решает проблему, ведь лучше вывести "Сервис временно недоступен" 200-м кодом, чем Internal server error с 500-м кодом.
Re: save() обработка ошибок
С чего вдруг то? Лучше вернуть "Success", чем "Server Error"?frid-karatel писал(а): ↑2017.03.06, 17:12 try... catch решает проблему, ведь лучше вывести "Сервис временно недоступен" 200-м кодом, чем Internal server error с 500-м кодом.
-
- Сообщения: 50
- Зарегистрирован: 2017.03.06, 15:37
- Откуда: Владивосток
Re: save() обработка ошибок
Тем, что 500я ошибка не сообщает пользователю, что надо делать.
Он видит Internal Server Error и тыкает F5 раз 10 в надежде, что когда-то починится.
А боты-анализаторы 500ю ошибку воспринимают как что-то подверженное уязвимости, и пытаются докопаться, генерируя ещё кучу 500 ошибок с разными параметрами.
Он видит Internal Server Error и тыкает F5 раз 10 в надежде, что когда-то починится.
А боты-анализаторы 500ю ошибку воспринимают как что-то подверженное уязвимости, и пытаются докопаться, генерируя ещё кучу 500 ошибок с разными параметрами.
Re: save() обработка ошибок
бред...frid-karatel писал(а): ↑2017.03.07, 12:47 Тем, что 500я ошибка не сообщает пользователю, что надо делать.
Он видит Internal Server Error и тыкает F5 раз 10 в надежде, что когда-то починится.
А боты-анализаторы 500ю ошибку воспринимают как что-то подверженное уязвимости, и пытаются докопаться, генерируя ещё кучу 500 ошибок с разными параметрами.
-
- Сообщения: 50
- Зарегистрирован: 2017.03.06, 15:37
- Откуда: Владивосток
Re: save() обработка ошибок
Почему бред?
Одно дело - показывать 404 ошибку, другое 500ю.
Вот увидел пользователю 500ю - как он на неё может повлиять, что ему дальше делать?
Ну вот он сидит и жмакает F5, пока сайт не заработает
Ему надо показать нормальный текст с ссылками перехода или туда, или сюда.
InternalServerError - это исключительная ошибка, на которую стоит обратить внимание программистам.
Её надо записать в лог для дальнейшего анализа через Yii::$app->errorHandler->logException($e);
Насчёт ботов-анализаторов уязвимостей - они как раз и ищут места, где возникают 500е ошибки.
Например, подменяют параметры в строке запроса в поле поиска.
И если сайт работал на одних параметрах в запросе, а на других словил ошибку, значит в нём что-то пошло не так.
Re: save() обработка ошибок
и поисковик проиндексирует ваш Сервис временно недоступен как обычную страницу - да, это конечно лучше..frid-karatel писал(а): ↑2017.03.06, 17:12 try... catch решает проблему, ведь лучше вывести "Сервис временно недоступен" 200-м кодом, чем Internal server error с 500-м кодом.
Re: save() обработка ошибок
а как он может повлиять на 404 ошибку? а на 403? а на 200 код? вообще-то пользователь вообще не может повлиять на сайт в общих чертах.frid-karatel писал(а): ↑2017.03.08, 03:44Почему бред?
Одно дело - показывать 404 ошибку, другое 500ю.
Вот увидел пользователю 500ю - как он на неё может повлиять, что ему дальше делать?
ну и пусть сидит жмет.
так покажи. шаблон 500 страницы по хорошему и не должен отличаться от шаблона основного сайта. только код страницы должен быть все равно 500, и юзеру все равно надо написать что страница работает некорректно.frid-karatel писал(а): ↑2017.03.08, 03:44 Ему надо показать нормальный текст с ссылками перехода или туда, или сюда.
InternalServerError - это описание огромного спектра проблем, которая полезна для пользователя, которому не нужно знать что там на самом деле происходит, и бесполезна для прогера, т.к. ему надо знать корневую ошибку, вызвавшую отказ.frid-karatel писал(а): ↑2017.03.08, 03:44InternalServerError - это исключительная ошибка, на которую стоит обратить внимание программистам.
Её надо записать в лог для дальнейшего анализа через Yii::$app->errorHandler->logException($e);
отлично. И программист увидит это в логах, и пофиксит, т.к. 500 ошибка на сайте - это практически всегда недосмотр программиста (недостаточная валидация входных данных).frid-karatel писал(а): ↑2017.03.08, 03:44Насчёт ботов-анализаторов уязвимостей - они как раз и ищут места, где возникают 500е ошибки.
Например, подменяют параметры в строке запроса в поле поиска.
И если сайт работал на одних параметрах в запросе, а на других словил ошибку, значит в нём что-то пошло не так.
-
- Сообщения: 50
- Зарегистрирован: 2017.03.06, 15:37
- Откуда: Владивосток
Re: save() обработка ошибок
Как повлиять на 404? Ну написано же: "Страница не найдена" - пойдёт на другую страницу, эта же не найдена.
А 500я, о чём она ему говорит? Возникла ошибка на сервере, ну возникла, и что дальше?
Странный подход к пользователю, ну смотря, конечно, от типа посетителей сайта, может там такие, кто в этом понимает.
Но всё же, надо считать, что посетители по своему образованию дуралеи, и им не надо давать думать над лишними проблемами.
У них своих хватает - им надо подсказать, позаботиться о них, предложить какие-то варианты.
Да в лоб написать: "Не закрывайте страницу, попробуйте через 5 минут".
Ну, а я что написал с самого начала? Что надо текст нормальный вывести, а не красный InternalServerError.
Не понял смысла, и не понял, зачем пользователю знать об этой ошибке.
Да блин, ладно, по-другому...
Пользователю не нужны ошибки, ему нужен рабочий сайт.
Если вы дорожите посетителями, надо ему нормально написать "чего делать, Зин?".
Он понятия не имеет, чем 500 отличается от 200, и вообще, что там есть какие-то коды...
И я как раз об этом и написал.
Верно, ну так боту зачем говорить об этом?
Записать тихо в лог, а ошибки валидации отобразить через механизм отображения ошибок в форме.
Re: save() обработка ошибок
пойдёт на другую страницу, на этой же ошибка. что ему еще делать? если думаете, что не прокатит, напишите что ему дальше делать. текст на 500 странице ваш же, а не дан свыше.frid-karatel писал(а): ↑2017.03.09, 19:29Как повлиять на 404? Ну написано же: "Страница не найдена" - пойдёт на другую страницу, эта же не найдена.
А 500я, о чём она ему говорит? Возникла ошибка на сервере, ну возникла, и что дальше?
что ему понимать? что сегодня кина на этой странице не будет?frid-karatel писал(а): ↑2017.03.09, 19:29Странный подход к пользователю, ну смотря, конечно, от типа посетителей сайта, может там такие, кто в этом понимает.
так разжуй - На странице произошла ошибка. Наши программисты уже работают над ней, пройдите на другую страницу.frid-karatel писал(а): ↑2017.03.09, 19:29Но всё же, надо считать, что посетители по своему образованию дуралеи, и им не надо давать думать над лишними проблемами.
именно. тогда о чем мы вообще говорим? вы явно не понимаете, что такое 500 и как это работает.frid-karatel писал(а): ↑2017.03.09, 19:29У них своих хватает - им надо подсказать, позаботиться о них, предложить какие-то варианты.
нет, ты написал нужен код 200. Текст это UI - какой хочешь такой и пиши. естественно он должен быть юзер-френдли.frid-karatel писал(а): ↑2017.03.09, 19:29Ну, а я что написал с самого начала? Что надо текст нормальный вывести, а не красный InternalServerError.
не об этой ошибке, а о том, что на странице ошибка, и кина не будет.frid-karatel писал(а): ↑2017.03.09, 19:29Не понял смысла, и не понял, зачем пользователю знать об этой ошибке.
а вы хоть знаете что такое 500? пользователь сайта не знает обычно 500 тут или 200 - это технические коды, не влияющие на пользователя.frid-karatel писал(а): ↑2017.03.09, 19:29 Да блин, ладно, по-другому...
Пользователю не нужны ошибки, ему нужен рабочий сайт.
Если вы дорожите посетителями, надо ему нормально написать "чего делать, Зин?".
Он понятия не имеет, чем 500 отличается от 200, и вообще, что там есть какие-то коды...
И я как раз об этом и написал.
чтобы он не сохранял себе в базу нерабочую страницу, иначе в выдаче гугла/яндекса вы увидите список однотипных страниц типа "на странице произошла ошибка, пройдите на главную".
500 возникнет именно тогда, когда программист не отловил ошибки валидации.frid-karatel писал(а): ↑2017.03.09, 19:29Записать тихо в лог, а ошибки валидации отобразить через механизм отображения ошибок в форме.
-
- Сообщения: 50
- Зарегистрирован: 2017.03.06, 15:37
- Откуда: Владивосток
Re: save() обработка ошибок
Я ж не про гугл писал, а про ботов, которые ошибки/уязвимости на сайтах ищут.
Гугл и яндекс не заполняют формы и не отправляют их.
Не отловил - значит, скорей всего, ушли в базу, и база выкинула Exception. И тому, кому надо, будет понятно, что именно не валидируется.
А остальное - дело техники и времени.
Re: save() обработка ошибок
500 ошибки возникают не только при заполнении форм. а поисковые боты все равно ваши страницы проиндексируют.frid-karatel писал(а): ↑2017.03.09, 19:55Я ж не про гугл писал, а про ботов, которые ошибки/уязвимости на сайтах ищут.
Гугл и яндекс не заполняют формы и не отправляют их.
бла-бла. спасибо, что повторяете мои тезисы. один только не повторили: код-то все равно 500.frid-karatel писал(а): ↑2017.03.09, 19:55Не отловил - значит, скорей всего, ушли в базу, и база выкинула Exception. И тому, кому надо, будет понятно, что именно не валидируется.
А остальное - дело техники и времени.
-
- Сообщения: 50
- Зарегистрирован: 2017.03.06, 15:37
- Откуда: Владивосток
Re: save() обработка ошибок
К чему это? Чтобы продолжить разговор?zelenin писал(а): ↑2017.03.09, 20:09500 ошибки возникают не только при заполнении форм. а поисковые боты все равно ваши страницы проиндексируют.frid-karatel писал(а): ↑2017.03.09, 19:55Я ж не про гугл писал, а про ботов, которые ошибки/уязвимости на сайтах ищут.
Гугл и яндекс не заполняют формы и не отправляют их.
Топикстартер изначально задал два вопроса, я на него уже давно ответил и высказал своё мнение.
Ну, можно ещё как рекомендацию это рассмотреть.
Ну, хочется, пусть будет 500, можно делать и не 500.zelenin писал(а): ↑2017.03.09, 20:09бла-бла. спасибо, что повторяете мои тезисы. один только не повторили: код-то все равно 500.frid-karatel писал(а): ↑2017.03.09, 19:55Не отловил - значит, скорей всего, ушли в базу, и база выкинула Exception. И тому, кому надо, будет понятно, что именно не валидируется.
А остальное - дело техники и времени.
Это ж Yii Можно как угодно делать.
Опять же, каждый решает сам, что он там выводит и как логи пишет.
Re: save() обработка ошибок
ну если указывание на ошибки это для продолжение разговора, то безусловноfrid-karatel писал(а): ↑2017.03.09, 20:15К чему это? Чтобы продолжить разговор?zelenin писал(а): ↑2017.03.09, 20:09500 ошибки возникают не только при заполнении форм. а поисковые боты все равно ваши страницы проиндексируют.frid-karatel писал(а): ↑2017.03.09, 19:55Я ж не про гугл писал, а про ботов, которые ошибки/уязвимости на сайтах ищут.
Гугл и яндекс не заполняют формы и не отправляют их.
вне всякого сомнения можно сделать все что угодно, хоть на yii, хоть на других 20ти фреймворках. мы обсуждали как надо, а именно как надо вы посоветовали неправильно, опираясь на неверные представления о предмете дискуссии.frid-karatel писал(а): ↑2017.03.09, 20:15Ну, хочется, пусть будет 500, можно делать и не 500.zelenin писал(а): ↑2017.03.09, 20:09бла-бла. спасибо, что повторяете мои тезисы. один только не повторили: код-то все равно 500.frid-karatel писал(а): ↑2017.03.09, 19:55 Не отловил - значит, скорей всего, ушли в базу, и база выкинула Exception. И тому, кому надо, будет понятно, что именно не валидируется.
А остальное - дело техники и времени.
Это ж Yii Можно как угодно делать.
Опять же, каждый решает сам, что он там выводит и как логи пишет.