перехват искл-ий и ошибок событиями onException и onError

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Stas
Сообщения: 441
Зарегистрирован: 2011.11.29, 16:00

перехват искл-ий и ошибок событиями onException и onError

Сообщение Stas »

в main.php на события onException и onError навешаны отправка писем с информацией об ошибках

Код: Выделить всё

'onException'=>array('ExceptionAndError', 'exeption'),
        'onError'=>array('ExceptionAndError', 'error'), 
вот код перехватчиков

Код: Выделить всё

<?php
class ExceptionAndError extends CExceptionEvent
{
    
    
    public function exeption($event)
    {
        //die('123');
        if(Yii::app()->user->isGuest)
            $user = 'Пользователь не был авторизован.';
        else
            $user = 'Id пользователя наткнувшегося на ошибку: ' . Yii::app()->user->id;
            
        $time = date("d/m  H:i:s", time());    
    
        $line = $event->exception->getLine();
        $file = $event->exception->getFile();
        $code = $event->exception->getCode();
        $message = $event->exception->getMessage();
        $controller = Yii::app()->controller->id;
        $action = Yii::app()->controller->getAction();
        $module = Yii::app()->controller->getModule();
        $exception= '<pre>'.$event->exception.'</pre>';
        $mail = new Mail;
        $mail->sendMail('[email protected]', 'Письмо от администрации сайта', '[email protected]', '[email protected]', '/site.ru', 'exeption', array('exception'=>$exception, 'controller'=>$controller,'module'=>$module, 'line'=>$line, 'action'=>$action, 'file'=>$file, 'message'=>$message, 'code'=>$code, 'user'=>$user, 'time'=>$time), 'site', 120);
    }
    
        public function error($event)
    {
        //var_dump($event);die;
        $code = $event->code;
        $file = $event->file;
        $line = $event->line;
        $message = $event->message;
        $time = date("d/m  H:i:s", time());
        $controller = Yii::app()->controller->id;
        $action = Yii::app()->controller->getAction();
        $module = Yii::app()->controller->getModule();
        
        if(Yii::app()->user->isGuest)
            $user = 'Пользователь не был авторизован.';
        else
            $user = 'Id пользователя наткнувшегося на ошибку: ' . Yii::app()->user->id;

        $mail = new Mail;
        $mail->sendMail([email protected]', 'Письмо от администрации сайта', '[email protected]', '[email protected]', '/site.ru', 'error', array('code'=>$code, 'file'=>$file, 'line'=>$line, 'message'=>$message, 'time'=>$time, 'user'=>$user, 'controller'=>$controller, 'module'=>$module, 'action'=>$action), 'site', 70);
    }
}
проблема в том что когда набирается урл с например несуществующим контроллером, например так http://site.ru/c то Yii не обрабатывает это через свое исключение а возникает белый экран с ошибкой

Код: Выделить всё


Notice: Trying to get property of non-object in /home/goh/site.ru/docs/protected/components/ExceptionAndError.php on line 21

Fatal error: Call to a member function getAction() on a non-object in /home/ff/fff.ru/docs/protected/components/ExceptionAndError.php on line 22

что интересно, что есть копия сайта с анологичным кодом и там эта ситуация обрабатывается как надо т е Yii перехватывает исключение и отображает отсутствие контроллера как надо

Подскажите пожалуйста в чем может быть проблема?
Stas
Сообщения: 441
Зарегистрирован: 2011.11.29, 16:00

Re: перехват искл-ий и ошибок событиями onException и onErr

Сообщение Stas »

кто-нибудь сталкивался с подобным?
Stas
Сообщения: 441
Зарегистрирован: 2011.11.29, 16:00

Re: перехват искл-ий и ошибок событиями onException и onErr

Сообщение Stas »

ни у кого никаких вариантов?
Аватара пользователя
because
Сообщения: 689
Зарегистрирован: 2010.09.30, 22:01

Re: перехват искл-ий и ошибок событиями onException и onErr

Сообщение because »

ну раз стандартный exception handler перекрыт своим, и в нем не обрабатывается эта ситуация, то отсюда и проблема
RTFM !
esche
Сообщения: 1054
Зарегистрирован: 2010.11.24, 03:39

Re: перехват искл-ий и ошибок событиями onException и onErr

Сообщение esche »

А в копии сайта с аналогичным кодом getAction отрабатывает?
Статья про обработку ошибок http://habrahabr.ru/blogs/yii/136138/

И чем не устраивает стандартный вариант log + email?
http://www.yiiframework.com/doc/api/1.1/CEmailLogRoute
...
Jampire
Сообщения: 207
Зарегистрирован: 2011.01.28, 11:45
Откуда: Гомель
Контактная информация:

Re: перехват искл-ий и ошибок событиями onException и onErr

Сообщение Jampire »

Я так понял строки 21 и 22 это

Код: Выделить всё

$controller = Yii::app()->controller->id;
$action = Yii::app()->controller->getAction(); 
И что вы пытаетесь сделать, если контроллера не существует? Правильно вам говорит пхп: "Товарищ, ты пытаешься вызвать метод несуществующего контроллера".
Изображение
Человек, говорящий, что это невозможно сделать, не должен мешать тому, кто это делает.
Stas
Сообщения: 441
Зарегистрирован: 2011.11.29, 16:00

Re: перехват искл-ий и ошибок событиями onException и onErr

Сообщение Stas »

так вот и должен возниунуть эксепшен, и на другом хосте почему-то работает, и эксепшет там не php а Yii
esche
Сообщения: 1054
Зарегистрирован: 2010.11.24, 03:39

Re: перехват искл-ий и ошибок событиями onException и onErr

Сообщение esche »

Fatal error без "подкрутки" не попадает в Yii-обработчик. См правый верхний уголок схемы в статье (красный блок и чуть ниже про register_shutdown_function). На другом хосте точно отрабатывает этот же код? При таких же условиях?
...
Denyii
Сообщения: 147
Зарегистрирован: 2012.02.13, 14:55

Re: перехват искл-ий и ошибок событиями onException и onErr

Сообщение Denyii »

А какая собственно цель написания своего перехватчика ошибок? ))
Как по мне Yii довольно не плохо справляется...
Stas
Сообщения: 441
Зарегистрирован: 2011.11.29, 16:00

Re: перехват искл-ий и ошибок событиями onException и onErr

Сообщение Stas »

получать их на почту, и при этом форматировать так как мне надо, а не как это Yii делает
skiff22
Сообщения: 4
Зарегистрирован: 2012.06.20, 10:42

Re: перехват искл-ий и ошибок событиями onException и onErr

Сообщение skiff22 »

Сейчас интересует тот же вопрос про перехват ошибок и исключений. Куда вставлять эти строки в main.php?

Код: Выделить всё

'onException'=>array('ExceptionAndError', 'exeption'),
'onError'=>array('ExceptionAndError', 'error'), 
Сюда?

Код: Выделить всё

'components'=>array(
    'user'=>array(
                'allowAutoLogin'=>true,
    ),
    'onException'=>array('ExceptionAndError', 'exeption'),
    'onError'=>array('ExceptionAndError', 'error'),
Denyii
Сообщения: 147
Зарегистрирован: 2012.02.13, 14:55

Re: перехват искл-ий и ошибок событиями onException и onErr

Сообщение Denyii »

Код: Выделить всё

return array(
    'preload' => array('log'),

    'import' => array(
    ),

    'modules' => array(
    ),

    'onError' => function($event) {
    },

    'onException' => function($event) {
    },

    'components' => array(
    ),
);
Ответить