Skip to content

Optimize error handling #144

@hannesbochmann

Description

@hannesbochmann

Errors/warnings of functions which are suppressed with "@" (for example @array_keys_exist('test', new \stdClass()) in PHP 7.4) are not ignored by the error handling. In Respect\Rest\Request::prepareForErrorForwards() all errors are collected and later forwarded to the error route. Problem is that the information if a error/warning was suppressed with "@" isn't present in the error route anymore. It only can be checked in the PHP error handler callback through error_reporting() === 0. So this check needs to be done in Respect\Rest\Request::prepareForErrorForwards() before adding a error to the error side route. Method would look like this:

protected function prepareForErrorForwards()
    {
       foreach ($this->route->sideRoutes as $sideRoute) {
            if ($sideRoute instanceof Routes\Error) {
                return set_error_handler(
                    function () use ($sideRoute) {
                        // Don't do anything if error_reporting is disabled by an @ sign
                        if (error_reporting() !== 0) {
                            $sideRoute->errors[] = func_get_args();
                        }
                    }
                );
            }
        }
    }

I can provide a pull request, too.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions