save() обработка ошибок

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Nicolai6120
Сообщения: 143
Зарегистрирован: 2014.08.13, 15:08

save() обработка ошибок

Сообщение Nicolai6120 »

Добрый день.

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

Я так понимаю, если сохранение такой модели не прошло, значит проблема либо с самой БД (к примеру, сервер БД на секудну отвалился в момент записи), либо с данными которые туда пишут (не прошли валидацию или просто вызвали ошибку БД), а так как пользователь один фиг повлиять на процесс не может, показывать ошибки валидации ему нет смысла. Значит нужно выкинуть Exception.

1. Кстати какой это должен быть Exception?
2. И правильно ли я рассуждаю?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: save() обработка ошибок

Сообщение ElisDN »

Если будет проблема с БД, то вылетит PDOException.

А так какое подойдёт по смыслу из http://php.net/manual/ru/spl.exceptions.php
Nicolai6120
Сообщения: 143
Зарегистрирован: 2014.08.13, 15:08

Re: save() обработка ошибок

Сообщение Nicolai6120 »

Выходит что при любом раскладе будет PDOException... А что увидит пользователь при такой ошибке на продакшене? (я прост не умею переключать environments)
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: save() обработка ошибок

Сообщение ElisDN »

Nicolai6120 писал(а): 2017.02.24, 14:54 А что увидит пользователь при такой ошибке на продакшене?
500 Internal Server Error
Nicolai6120
Сообщения: 143
Зарегистрирован: 2014.08.13, 15:08

Re: save() обработка ошибок

Сообщение Nicolai6120 »

Спасибо!
frid-karatel
Сообщения: 50
Зарегистрирован: 2017.03.06, 15:37
Откуда: Владивосток

Re: save() обработка ошибок

Сообщение frid-karatel »

try... catch решает проблему, ведь лучше вывести "Сервис временно недоступен" 200-м кодом, чем Internal server error с 500-м кодом.
Nerf
Сообщения: 780
Зарегистрирован: 2015.01.29, 00:37

Re: save() обработка ошибок

Сообщение Nerf »

frid-karatel писал(а): 2017.03.06, 17:12 try... catch решает проблему, ведь лучше вывести "Сервис временно недоступен" 200-м кодом, чем Internal server error с 500-м кодом.
С чего вдруг то? Лучше вернуть "Success", чем "Server Error"? :shock:
frid-karatel
Сообщения: 50
Зарегистрирован: 2017.03.06, 15:37
Откуда: Владивосток

Re: save() обработка ошибок

Сообщение frid-karatel »

Тем, что 500я ошибка не сообщает пользователю, что надо делать.
Он видит Internal Server Error и тыкает F5 раз 10 в надежде, что когда-то починится.

А боты-анализаторы 500ю ошибку воспринимают как что-то подверженное уязвимости, и пытаются докопаться, генерируя ещё кучу 500 ошибок с разными параметрами.
Nerf
Сообщения: 780
Зарегистрирован: 2015.01.29, 00:37

Re: save() обработка ошибок

Сообщение Nerf »

frid-karatel писал(а): 2017.03.07, 12:47 Тем, что 500я ошибка не сообщает пользователю, что надо делать.
Он видит Internal Server Error и тыкает F5 раз 10 в надежде, что когда-то починится.

А боты-анализаторы 500ю ошибку воспринимают как что-то подверженное уязвимости, и пытаются докопаться, генерируя ещё кучу 500 ошибок с разными параметрами.
бред...
frid-karatel
Сообщения: 50
Зарегистрирован: 2017.03.06, 15:37
Откуда: Владивосток

Re: save() обработка ошибок

Сообщение frid-karatel »

Nerf писал(а): 2017.03.07, 15:31бред...
Почему бред?

Одно дело - показывать 404 ошибку, другое 500ю.
Вот увидел пользователю 500ю - как он на неё может повлиять, что ему дальше делать?
Ну вот он сидит и жмакает F5, пока сайт не заработает :-)

Ему надо показать нормальный текст с ссылками перехода или туда, или сюда.
InternalServerError - это исключительная ошибка, на которую стоит обратить внимание программистам.
Её надо записать в лог для дальнейшего анализа через Yii::$app->errorHandler->logException($e);

Насчёт ботов-анализаторов уязвимостей - они как раз и ищут места, где возникают 500е ошибки.
Например, подменяют параметры в строке запроса в поле поиска.
И если сайт работал на одних параметрах в запросе, а на других словил ошибку, значит в нём что-то пошло не так.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: save() обработка ошибок

Сообщение zelenin »

frid-karatel писал(а): 2017.03.06, 17:12 try... catch решает проблему, ведь лучше вывести "Сервис временно недоступен" 200-м кодом, чем Internal server error с 500-м кодом.
и поисковик проиндексирует ваш Сервис временно недоступен как обычную страницу - да, это конечно лучше..
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: save() обработка ошибок

Сообщение zelenin »

frid-karatel писал(а): 2017.03.08, 03:44
Nerf писал(а): 2017.03.07, 15:31бред...
Почему бред?

Одно дело - показывать 404 ошибку, другое 500ю.
Вот увидел пользователю 500ю - как он на неё может повлиять, что ему дальше делать?
а как он может повлиять на 404 ошибку? а на 403? а на 200 код? вообще-то пользователь вообще не может повлиять на сайт в общих чертах.
frid-karatel писал(а): 2017.03.08, 03:44Ну вот он сидит и жмакает F5, пока сайт не заработает :-)
ну и пусть сидит жмет.
frid-karatel писал(а): 2017.03.08, 03:44 Ему надо показать нормальный текст с ссылками перехода или туда, или сюда.
так покажи. шаблон 500 страницы по хорошему и не должен отличаться от шаблона основного сайта. только код страницы должен быть все равно 500, и юзеру все равно надо написать что страница работает некорректно.
frid-karatel писал(а): 2017.03.08, 03:44InternalServerError - это исключительная ошибка, на которую стоит обратить внимание программистам.
Её надо записать в лог для дальнейшего анализа через Yii::$app->errorHandler->logException($e);
InternalServerError - это описание огромного спектра проблем, которая полезна для пользователя, которому не нужно знать что там на самом деле происходит, и бесполезна для прогера, т.к. ему надо знать корневую ошибку, вызвавшую отказ.

frid-karatel писал(а): 2017.03.08, 03:44Насчёт ботов-анализаторов уязвимостей - они как раз и ищут места, где возникают 500е ошибки.
Например, подменяют параметры в строке запроса в поле поиска.
И если сайт работал на одних параметрах в запросе, а на других словил ошибку, значит в нём что-то пошло не так.
отлично. И программист увидит это в логах, и пофиксит, т.к. 500 ошибка на сайте - это практически всегда недосмотр программиста (недостаточная валидация входных данных).
frid-karatel
Сообщения: 50
Зарегистрирован: 2017.03.06, 15:37
Откуда: Владивосток

Re: save() обработка ошибок

Сообщение frid-karatel »

zelenin писал(а): 2017.03.08, 07:59а как он может повлиять на 404 ошибку? а на 403? а на 200 код? вообще-то пользователь вообще не может повлиять на сайт в общих чертах.
zelenin писал(а): 2017.03.08, 07:59ну и пусть сидит жмет.
Как повлиять на 404? Ну написано же: "Страница не найдена" - пойдёт на другую страницу, эта же не найдена.
А 500я, о чём она ему говорит? Возникла ошибка на сервере, ну возникла, и что дальше?

Странный подход к пользователю, ну смотря, конечно, от типа посетителей сайта, может там такие, кто в этом понимает.
Но всё же, надо считать, что посетители по своему образованию дуралеи, и им не надо давать думать над лишними проблемами.
У них своих хватает - им надо подсказать, позаботиться о них, предложить какие-то варианты.
Да в лоб написать: "Не закрывайте страницу, попробуйте через 5 минут".
zelenin писал(а): 2017.03.08, 07:59так покажи. шаблон 500 страницы по хорошему и не должен отличаться от шаблона основного сайта. только код страницы должен быть все равно 500, и юзеру все равно надо написать что страница работает некорректно.
Ну, а я что написал с самого начала? Что надо текст нормальный вывести, а не красный InternalServerError.
zelenin писал(а): 2017.03.08, 07:59InternalServerError - это описание огромного спектра проблем, которая полезна для пользователя, которому не нужно знать что там на самом деле происходит, и бесполезна для прогера, т.к. ему надо знать корневую ошибку, вызвавшую отказ.
Не понял смысла, и не понял, зачем пользователю знать об этой ошибке.
Да блин, ладно, по-другому...
Пользователю не нужны ошибки, ему нужен рабочий сайт.
Если вы дорожите посетителями, надо ему нормально написать "чего делать, Зин?".
Он понятия не имеет, чем 500 отличается от 200, и вообще, что там есть какие-то коды...
И я как раз об этом и написал.
zelenin писал(а): 2017.03.08, 07:59отлично. И программист увидит это в логах, и пофиксит, т.к. 500 ошибка на сайте - это практически всегда недосмотр программиста (недостаточная валидация входных данных).
Верно, ну так боту зачем говорить об этом?
Записать тихо в лог, а ошибки валидации отобразить через механизм отображения ошибок в форме.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: save() обработка ошибок

Сообщение zelenin »

frid-karatel писал(а): 2017.03.09, 19:29
zelenin писал(а): 2017.03.08, 07:59а как он может повлиять на 404 ошибку? а на 403? а на 200 код? вообще-то пользователь вообще не может повлиять на сайт в общих чертах.
zelenin писал(а): 2017.03.08, 07:59ну и пусть сидит жмет.
Как повлиять на 404? Ну написано же: "Страница не найдена" - пойдёт на другую страницу, эта же не найдена.
А 500я, о чём она ему говорит? Возникла ошибка на сервере, ну возникла, и что дальше?
пойдёт на другую страницу, на этой же ошибка. что ему еще делать? если думаете, что не прокатит, напишите что ему дальше делать. текст на 500 странице ваш же, а не дан свыше.
frid-karatel писал(а): 2017.03.09, 19:29Странный подход к пользователю, ну смотря, конечно, от типа посетителей сайта, может там такие, кто в этом понимает.
что ему понимать? что сегодня кина на этой странице не будет?
frid-karatel писал(а): 2017.03.09, 19:29Но всё же, надо считать, что посетители по своему образованию дуралеи, и им не надо давать думать над лишними проблемами.
так разжуй - На странице произошла ошибка. Наши программисты уже работают над ней, пройдите на другую страницу.
frid-karatel писал(а): 2017.03.09, 19:29У них своих хватает - им надо подсказать, позаботиться о них, предложить какие-то варианты.
именно. тогда о чем мы вообще говорим? вы явно не понимаете, что такое 500 и как это работает.

frid-karatel писал(а): 2017.03.09, 19:29
zelenin писал(а): 2017.03.08, 07:59так покажи. шаблон 500 страницы по хорошему и не должен отличаться от шаблона основного сайта. только код страницы должен быть все равно 500, и юзеру все равно надо написать что страница работает некорректно.
Ну, а я что написал с самого начала? Что надо текст нормальный вывести, а не красный InternalServerError.
нет, ты написал нужен код 200. Текст это UI - какой хочешь такой и пиши. естественно он должен быть юзер-френдли.
frid-karatel писал(а): 2017.03.09, 19:29
zelenin писал(а): 2017.03.08, 07:59InternalServerError - это описание огромного спектра проблем, которая полезна для пользователя, которому не нужно знать что там на самом деле происходит, и бесполезна для прогера, т.к. ему надо знать корневую ошибку, вызвавшую отказ.
Не понял смысла, и не понял, зачем пользователю знать об этой ошибке.
не об этой ошибке, а о том, что на странице ошибка, и кина не будет.
frid-karatel писал(а): 2017.03.09, 19:29 Да блин, ладно, по-другому...
Пользователю не нужны ошибки, ему нужен рабочий сайт.
Если вы дорожите посетителями, надо ему нормально написать "чего делать, Зин?".
Он понятия не имеет, чем 500 отличается от 200, и вообще, что там есть какие-то коды...
И я как раз об этом и написал.
а вы хоть знаете что такое 500? пользователь сайта не знает обычно 500 тут или 200 - это технические коды, не влияющие на пользователя.

frid-karatel писал(а): 2017.03.09, 19:29
zelenin писал(а): 2017.03.08, 07:59отлично. И программист увидит это в логах, и пофиксит, т.к. 500 ошибка на сайте - это практически всегда недосмотр программиста (недостаточная валидация входных данных).
Верно, ну так боту зачем говорить об этом?
чтобы он не сохранял себе в базу нерабочую страницу, иначе в выдаче гугла/яндекса вы увидите список однотипных страниц типа "на странице произошла ошибка, пройдите на главную".
frid-karatel писал(а): 2017.03.09, 19:29Записать тихо в лог, а ошибки валидации отобразить через механизм отображения ошибок в форме.
500 возникнет именно тогда, когда программист не отловил ошибки валидации.
frid-karatel
Сообщения: 50
Зарегистрирован: 2017.03.06, 15:37
Откуда: Владивосток

Re: save() обработка ошибок

Сообщение frid-karatel »

zelenin писал(а): 2017.03.08, 07:59чтобы он не сохранял себе в базу нерабочую страницу, иначе в выдаче гугла/яндекса вы увидите список однотипных страниц типа "на странице произошла ошибка, пройдите на главную".
Я ж не про гугл писал, а про ботов, которые ошибки/уязвимости на сайтах ищут.
Гугл и яндекс не заполняют формы и не отправляют их.
zelenin писал(а): 2017.03.08, 07:59500 возникнет именно тогда, когда программист не отловил ошибки валидации.
Не отловил - значит, скорей всего, ушли в базу, и база выкинула Exception. И тому, кому надо, будет понятно, что именно не валидируется.
А остальное - дело техники и времени.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: save() обработка ошибок

Сообщение zelenin »

frid-karatel писал(а): 2017.03.09, 19:55Я ж не про гугл писал, а про ботов, которые ошибки/уязвимости на сайтах ищут.
Гугл и яндекс не заполняют формы и не отправляют их.
500 ошибки возникают не только при заполнении форм. а поисковые боты все равно ваши страницы проиндексируют.
frid-karatel писал(а): 2017.03.09, 19:55
zelenin писал(а): 2017.03.08, 07:59500 возникнет именно тогда, когда программист не отловил ошибки валидации.
Не отловил - значит, скорей всего, ушли в базу, и база выкинула Exception. И тому, кому надо, будет понятно, что именно не валидируется.
А остальное - дело техники и времени.
бла-бла. спасибо, что повторяете мои тезисы. один только не повторили: код-то все равно 500.
frid-karatel
Сообщения: 50
Зарегистрирован: 2017.03.06, 15:37
Откуда: Владивосток

Re: save() обработка ошибок

Сообщение frid-karatel »

zelenin писал(а): 2017.03.09, 20:09
frid-karatel писал(а): 2017.03.09, 19:55Я ж не про гугл писал, а про ботов, которые ошибки/уязвимости на сайтах ищут.
Гугл и яндекс не заполняют формы и не отправляют их.
500 ошибки возникают не только при заполнении форм. а поисковые боты все равно ваши страницы проиндексируют.
К чему это? Чтобы продолжить разговор?
Топикстартер изначально задал два вопроса, я на него уже давно ответил и высказал своё мнение.
Ну, можно ещё как рекомендацию это рассмотреть.
zelenin писал(а): 2017.03.09, 20:09
frid-karatel писал(а): 2017.03.09, 19:55
zelenin писал(а): 2017.03.08, 07:59500 возникнет именно тогда, когда программист не отловил ошибки валидации.
Не отловил - значит, скорей всего, ушли в базу, и база выкинула Exception. И тому, кому надо, будет понятно, что именно не валидируется.
А остальное - дело техники и времени.
бла-бла. спасибо, что повторяете мои тезисы. один только не повторили: код-то все равно 500.
Ну, хочется, пусть будет 500, можно делать и не 500.
Это ж Yii :-) Можно как угодно делать.
Опять же, каждый решает сам, что он там выводит и как логи пишет.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: save() обработка ошибок

Сообщение zelenin »

frid-karatel писал(а): 2017.03.09, 20:15
zelenin писал(а): 2017.03.09, 20:09
frid-karatel писал(а): 2017.03.09, 19:55Я ж не про гугл писал, а про ботов, которые ошибки/уязвимости на сайтах ищут.
Гугл и яндекс не заполняют формы и не отправляют их.
500 ошибки возникают не только при заполнении форм. а поисковые боты все равно ваши страницы проиндексируют.
К чему это? Чтобы продолжить разговор?
ну если указывание на ошибки это для продолжение разговора, то безусловно
frid-karatel писал(а): 2017.03.09, 20:15
zelenin писал(а): 2017.03.09, 20:09
frid-karatel писал(а): 2017.03.09, 19:55 Не отловил - значит, скорей всего, ушли в базу, и база выкинула Exception. И тому, кому надо, будет понятно, что именно не валидируется.
А остальное - дело техники и времени.
бла-бла. спасибо, что повторяете мои тезисы. один только не повторили: код-то все равно 500.
Ну, хочется, пусть будет 500, можно делать и не 500.
Это ж Yii :-) Можно как угодно делать.
Опять же, каждый решает сам, что он там выводит и как логи пишет.
вне всякого сомнения можно сделать все что угодно, хоть на yii, хоть на других 20ти фреймворках. мы обсуждали как надо, а именно как надо вы посоветовали неправильно, опираясь на неверные представления о предмете дискуссии.
Ответить