/** * If you want skip some errors, call: * Magic::registerErrorDumper()->setPreCallback(callable $preCallback); * * If you want save information about error, call: * Magic::registerErrorDumper()->setPostCallback(callable $postCallback); * * Chain syntax is supported, for example: * Magic::registerErrorDumper() * ->setPreCallback(callable $preCallback) * ->setPostCallback(callable $postCallback); * * @see Handler::__invoke() * @param Editors\EditorInterface|null $editor * @param int $errorTypes * @return HandlerInterface */ public static function registerErrorDumper(Editors\EditorInterface $editor = null, $errorTypes = RegisterErrorHandler::TYPE_ALL) { $dumper = self::createDumperBySapiName($editor); $handler = new Handler($dumper); $handler->setPostCallback(function () { exit(1); }); if (php_sapi_name() !== 'cli') { $handler->setPreCallback(function () { if (!headers_sent()) { header('HTTP/1.1 503 Service Temporarily Unavailable'); header('Status: 503 Service Temporarily Unavailable'); header('Retry-After: 300'); } }); } $registerErrorHandler = new RegisterErrorHandler($handler); $registerErrorHandler->register($errorTypes); return $handler; }
/** * @dataProvider callbacksDataProvider */ public function testCallbacks($preText, $exceptionText, $postText, $break, $stream, $expected) { $self = $this; $fakeException = new FakeException(); $exception = $fakeException->setMessage($exceptionText); $dumper = $this->createDumper(); $handler = new Handler($dumper); /** @var \PHPUnit_Framework_MockObject_MockObject|PreCallbackEvent $preCallback */ $preCallback = $this->getMockForAbstractClass('ErrorDumper\\Handlers\\PreCallbackEvent'); $preCallback->method('__invoke')->willReturnCallback(function ($currentE) use($stream, $exception, $preText, $break, $preCallback, $self) { $self->assertSame($exception, $currentE); fputs($stream, $preText); $break && $preCallback->stopDisplay(); }); $dumper->setOutputStream($stream); $handler->setPreCallback($preCallback); $handler->setPostCallback(function ($currentE) use($stream, $exception, $postText, $self) { $self->assertSame($exception, $currentE); fputs($stream, $postText); }); $handler($exception); $streamObj = new Stream($stream); $this->assertSame($expected, $streamObj->getContents()); }