My previous comment was incorrect, you can easily override
ErrorHandler methods by creating app_error.php and AppError extends
ErrorHandler (as per my first comment).

This is how I have decided to handle production errors now:

<?php
/**
 * Handle logging errors in production mode
 */
if (Configure::read() === 0) {

    // Disable the default handling and include logger
    define('DISABLE_DEFAULT_ERROR_HANDLING', 1);
    uses('cake_log');

    /**
     * A function to directly log errors
     *
     * @param $errno The error number
     * @param $errstr The error description
     * @param $errfile The file where the error occured
     * @param $errline The line of the file where the error occured
     * @return bool Success
     */
    function productionError($errno, $errstr, $errfile, $errline) {
        if ($errno === 2048) {
            return;
        }

                $level = LOG_DEBUG;
                switch ($errno) {
                        case E_PARSE:
                        case E_ERROR:
                        case E_CORE_ERROR:
                        case E_COMPILE_ERROR:
                        case E_USER_ERROR:
                                $error = 'Fatal Error';
                                $level = LOG_ERROR;
                        break;
                        case E_WARNING:
                        case E_USER_WARNING:
                        case E_COMPILE_WARNING:
                        case E_RECOVERABLE_ERROR:
                                $error = 'Warning';
                                $level = LOG_WARNING;
                        break;
                        case E_NOTICE:
                        case E_USER_NOTICE:
                                $error = 'Notice';
                                $level = LOG_NOTICE;
                        break;
                        default:
                                return false;
                        break;
                }

                CakeLog::write($level, "{$error} ({$errno}): {$errstr} in
[{$errfile}, line {$errline}]");

                if ($error == 'Fatal Error') {
                        die();
                }
                return true;
    }

    // Use the above handling
    set_error_handler('productionError');
}

This code belongs in your bootstrap.php file.

This is how I am handling custom error pages in production:
<?php
    function __construct($method, $messages)
    {
        $methods = array('paypal', 'system', 'payflow', 'cart',
'generate');
        if (in_array($method, $methods)) {
            Configure::write('debug', 1);
        }
        parent::__construct($method, $messages);
    }
?>

Ideally cake would support a debug level of between production and
development, this would allow:
- Errors to still be logged in production environments
- Custom error handlers (as raised by cakeError) to be displayed to
the user.

I have raised an enhancement so the clever folks in the development
team can consider:
https://trac.cakephp.org/ticket/6165

Regards,
Aidan


On Mar 4, 9:02 pm, Aidan Lister <aidanlis...@gmail.com> wrote:
> Hi,
>
> Firstly, there is no mechanism to overriding any of the functions in
> the ErrorHandler class.
>
> Secondly, it's completely unnecessary, as you can use either
> _outputMessage() or appError() to achieve the same thing. Neither of
> these lend themselves to a) or b).
>
> - Aidan
>
> On Mar 4, 5:28 am, mscdex <msc...@gmail.com> wrote:
>
> > On Mar 3, 1:08 pm, Aidan Lister <aidanlis...@gmail.com> wrote:
>
> > > Does anyone else have any suggestions?
>
> > Why not override ErrorHandler's default 'error' function to handle the
> > HTTP errors?
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To post to this group, send email to cake-php@googlegroups.com
To unsubscribe from this group, send email to 
cake-php+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to