Тупые вопросы про Exception

fixxxer

К.О.
Партнер клуба
Вурдалак
так?
PHP:
...
 } cath(AlphaException $e) { 
       throw new BetaException('свое сообщение об ошибке', 0, $e);
    }
....
Так, только не надо это превращать в общую практику. Скажем, может действительно быть надо поймать исключение внешней библиотеки и перебросить свое - ну да ок, но в своем коде такое разводить не стоит.
Перечитал всю тему и задался вопросом, если есть условно 3 типа ошибок:
1. E_ALL ... - которые генерирует php;
2. Exception;
3. Ошибки пользователя, которые не являются исключительной ситуацией;
1) http://php.net/ErrorException
2) throw new LogicException и т.д.
3) это не исключения и не имеют отношения к вопросу.
Нужно (и удобно ли будет) создать единый класс, для обработки всех этих ошибок?
И что он будет делать?
 

cDLEON

Онанист РНРСlub
fixxxer
Т.е. это излишняя гибкость? Можно отнести к недостаткам, да. Но возможность получить всю интересующую меня информацию об ошибке в одном объекте, да еще с очень прозрачной схемой, часто перевешивает.
PHP:
try {
   $model->doSmth();
   $model2->doOther();
   $model3->doOtherWithRelatedModel();
} catch (ValidationException $e) {
   $errors = $model->getErrors();
   // нет никакого смысла пропихивать getErrors в $e - получится бессмысленное дублирование
}
В каком месте случился облом?
 

fixxxer

К.О.
Партнер клуба
Это, очевидно, обновления, потому такое в контроллере написано быть не может, как минимум, потому что нужна транзакция, и к тому же, о связах моделей должны знать сами модели, а не контроллер.

Соответственно, модель должна сама оперировать со своими связями и проводить сначала полную валидацию, а потом уже сохранение всего в транзакции.
 

fawkes

Новичок
но в своем коде такое разводить не стоит.
хм, а как нить иначе делать обертку нельзя?

1) http://php.net/ErrorException
2) throw new LogicException и т.д.
3) это не исключения и не имеют отношения к вопросу.
ясно. Спасибо

И что он будет делать?
мб логирование в xml, взаимодействие с ajax..., возможно глупая затея
 

fixxxer

К.О.
Партнер клуба
хм, а как нить иначе делать обертку нельзя?
А не надо хотеть. Если вылетел RuntimeException то совершенно все равно, откуда.
А если у тебя пачка MyClass_Foo_Exception то наверное стоит прочитать выше большое обсуждение про то, для чего не надо использовать исключения.
мб логирование в xml, взаимодействие с ajax..., возможно глупая затея
Ты валишь все в кучу.

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

Ajax тут вообще никаким местом: пользователю не надо знать о твоих эксепшенах, разработчику, в свою очередь, неинтересно, где какой пользователь неправильно ввел email. Валидация пользовательского ввода не имеет к теме никакого отношения.
 

fawkes

Новичок
А не надо хотеть. Если вылетел RuntimeException то совершенно все равно, откуда.
ок.
Ты валишь все в кучу.
Нет. Вывод ошибок для разработчика, т.е. эксепшены при включенном дебаге.
PHP:
class baseException extends Exception
{
...

final public function ajaxGetAllInfo()
    {
        return json_encode(
            array(
                'error' => $data = array(
                    'message' => $this->_message,
                    'allInfo' => $this->__toString()
                )
            )
        );
     }
}
А за валидацию пользовательского ввода, целиком и полностью отвечает jQuery.

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

fawkes

Новичок
то есть если я выключу javascript, я могу зарегаться с мылом разработчик@сайта.идиот?
:D
При отключении js сайт скажет включить его и все. Без js просто не работает.
 

uid

Новичок
fawkes
а если я отправлю пост-запрос с заведомо невалидными данными, например, курлом?
 

Silentland

Новичок
А за валидацию пользовательского ввода, целиком и полностью отвечает jQuery
Целиком и полностью, как-то опасно отвечать js-скрипту. Все критичная к безопасности валидация всегда на сервере или я отстал от жизни?
 

fawkes

Новичок
Целиком и полностью, как-то опасно отвечать js-скрипту. Все критичная к безопасности валидация всегда на сервере или я отстал от жизни?
Нет. Я был не прав. Всего-то :)
 
Сверху