public static function handler($e)
    {
        $output = '';

        try {
            // Instead of just throwing an empty page, return a 404 page.
            if (self::$enabled !== true) {
                $e = new FrontendPageNotFoundException();
            }

            // Validate the type, resolve to a 404 if not valid
            if (!static::isValidThrowable($e)) {
                $e = new FrontendPageNotFoundException();
            }

            $exception_type = get_class($e);

            if (class_exists("{$exception_type}Handler") && method_exists("{$exception_type}Handler", 'render')) {
                $class = "{$exception_type}Handler";
            } else {
                $class = __CLASS__;
            }

            // Exceptions should be logged if they are not caught.
            if (self::$_Log instanceof Log) {
                self::$_Log->pushExceptionToLog($e, true);
            }

            $output = call_user_func(array($class, 'render'), $e);

        // If an exception was raised trying to render the exception, fall back
        // to the generic exception handler
        } catch (Exception $e) {
            try {
                $output = call_user_func(array('GenericExceptionHandler', 'render'), $e);

            // If the generic exception handler couldn't do it, well we're in bad
            // shape, just output a plaintext response!
            } catch (Exception $e) {
                echo "<pre>";
                echo 'A severe error occurred whilst trying to handle an exception, check the Symphony log for more details' . PHP_EOL;
                echo $e->getMessage() . ' on ' . $e->getLine() . ' of file ' . $e->getFile() . PHP_EOL;
                exit;
            }
        }

        // Pending nothing disasterous, we should have `$e` and `$output` values here.
        if (!headers_sent()) {
            cleanup_session_cookies();

            // Inspect the exception to determine the best status code
            $httpStatus = null;
            if ($e instanceof SymphonyErrorPage) {
                $httpStatus = $e->getHttpStatusCode();
            } elseif ($e instanceof FrontendPageNotFoundException) {
                $httpStatus = Page::HTTP_STATUS_NOT_FOUND;
            }

            if (!$httpStatus || $httpStatus == Page::HTTP_STATUS_OK) {
                $httpStatus = Page::HTTP_STATUS_ERROR;
            }

            Page::renderStatusCode($httpStatus);
            header('Content-Type: text/html; charset=utf-8');
        }

        echo $output;
        exit;
    }
public static function handler($e)
    {
        $output = '';

        try {
            // Instead of just throwing an empty page, return a 404 page.
            if (self::$enabled !== true) {
                $e = new FrontendPageNotFoundException();
            }

            // Validate the type, resolve to a 404 if not valid
            if (!static::isValidThrowable($e)) {
                $e = new FrontendPageNotFoundException();
            }

            $exception_type = get_class($e);

            if (class_exists("{$exception_type}Handler") && method_exists("{$exception_type}Handler", 'render')) {
                $class = "{$exception_type}Handler";
            } else {
                $class = __CLASS__;
            }

            // Exceptions should be logged if they are not caught.
            if (self::$_Log instanceof Log) {
                self::$_Log->pushExceptionToLog($e, true);
            }

            $output = call_user_func(array($class, 'render'), $e);

        // If an exception was raised trying to render the exception, fall back
        // to the generic exception handler
        } catch (Exception $e) {
            try {
                $output = call_user_func(array('GenericExceptionHandler', 'render'), $e);

            // If the generic exception handler couldn't do it, well we're in bad
            // shape, just output a plaintext response!
            } catch (Exception $e) {
                echo "<pre>";
                echo 'A severe error occurred whilst trying to handle an exception, check the Symphony log for more details' . PHP_EOL;
                echo $e->getMessage() . ' on ' . $e->getLine() . ' of file ' . $e->getFile() . PHP_EOL;
                exit;
            }
        }

        // Pending nothing disasterous, we should have `$e` and `$output` values here.
        if (!headers_sent()) {
            cleanup_session_cookies();

            // Inspect the exception to determine the best status code
            $httpStatus = null;
            if ($e instanceof SymphonyErrorPage) {
                $httpStatus = $e->getHttpStatusCode();
            } elseif ($e instanceof FrontendPageNotFoundException) {
                $httpStatus = Page::HTTP_STATUS_NOT_FOUND;
            }

            if (!$httpStatus || $httpStatus == Page::HTTP_STATUS_OK) {
                $httpStatus = Page::HTTP_STATUS_ERROR;
            }

            Page::renderStatusCode($httpStatus);
            header('Content-Type: text/html; charset=utf-8');
        }

        echo $output;
        exit;
    }
public static function handler ( $ e ) { $ output = '' ; try { // Instead of just throwing an empty page, return a 404 page. if ( self :: $ enabled !== true ) { $ e = new FrontendPageNotFoundException ( ) ; } // Validate the type, resolve to a 404 if not valid if ( ! static :: isValidThrowable ( $ e ) ) { $ e = new FrontendPageNotFoundException ( ) ; } $ exception_type = get_class ( $ e ) ; if ( class_exists ( "{$exception_type}Handler" ) && method_exists ( "{$exception_type}Handler" , 'render' ) ) { $ class = "{$exception_type}Handler" ; } else { $ class = __CLASS__ ; } // Exceptions should be logged if they are not caught. if ( self :: $ _Log instanceof Log ) { self :: $ _Log -> pushExceptionToLog ( $ e , true ) ; } $ output = call_user_func ( array ( $ class , 'render' ) , $ e ) ; // If an exception was raised trying to render the exception, fall back // to the generic exception handler } catch ( Exception $ e ) { try { $ output = call_user_func ( array ( 'GenericExceptionHandler' , 'render' ) , $ e ) ; // If the generic exception handler couldn't do it, well we're in bad // shape, just output a plaintext response! } catch ( Exception $ e ) { echo "<pre>" ; echo 'A severe error occurred whilst trying to handle an exception, check the Symphony log for more details' . PHP_EOL ; echo $ e -> getMessage ( ) . ' on ' . $ e -> getLine ( ) . ' of file ' . $ e -> getFile ( ) . PHP_EOL ; exit ; } } // Pending nothing disasterous, we should have `$e` and `$output` values here. if ( ! headers_sent ( ) ) { cleanup_session_cookies ( ) ; // Inspect the exception to determine the best status code $ httpStatus = null ; if ( $ e instanceof SymphonyErrorPage ) { $ httpStatus = $ e -> getHttpStatusCode ( ) ; } elseif ( $ e instanceof FrontendPageNotFoundException ) { $ httpStatus = Page :: HTTP_STATUS_NOT_FOUND ; } if ( ! $ httpStatus || $ httpStatus == Page :: HTTP_STATUS_OK ) { $ httpStatus = Page :: HTTP_STATUS_ERROR ; } Page :: renderStatusCode ( $ httpStatus ) ; header ( 'Content-Type: text/html; charset=utf-8' ) ; } echo $ output ; exit ; }
The handler function is given an Throwable and will call it's render
function to display the Throwable to a user. After calling the render
function, the output is displayed and then exited to prevent any further
logic from occurring.

@since Symphony 2.7.0
This function works with both Exception and Throwable
Supporting both PHP 5.6 and 7 forces use to not qualify the $e parameter

@param Throwable $e
The Throwable object
@return string
The result of the Throwable's render function
The handler function is given an Throwable and will call it s render function to display the Throwable to a user . After calling the render function the output is displayed and then exited to prevent any further logic from occurring .