diff --git a/src/Response.php b/src/Response.php index 32fe744..201b925 100644 --- a/src/Response.php +++ b/src/Response.php @@ -104,6 +104,14 @@ public function setExitCallback(callable $callback):void { $this->exitCallback = $callback; } + public function abort(?int $statusCode = null):void { + if($statusCode) { + $this->setStatus($statusCode); + } + + call_user_func($this->exitCallback); + } + public function reload():void { $this->redirect($this->request?->getUri() ?? new Uri("./")); } @@ -164,6 +172,10 @@ public function withStatus( return $clone; } + public function setStatus(int $code):void { + $this->statusCode = $code; + } + /** @inheritDoc */ public function getReasonPhrase():string { return StatusCode::REASON_PHRASE[$this->statusCode]; diff --git a/test/phpunit/ResponseTest.php b/test/phpunit/ResponseTest.php index 506b6ee..fc7e12f 100644 --- a/test/phpunit/ResponseTest.php +++ b/test/phpunit/ResponseTest.php @@ -29,6 +29,37 @@ public function testWithStatusCode() { ); } + public function testSetStatus() { + $sut = new Response(123); + $sut->setStatus(321); + self::assertSame(321, $sut->getStatusCode()); + } + + public function testAbort() { + $called = false; + $exitCallback = function()use(&$called) { + $called = true; + }; + + $sut = new Response(); + $sut->setExitCallback($exitCallback); + $sut->abort(); + self::assertTrue($called); + } + + public function testAbort_withNewStatus() { + $called = false; + $exitCallback = function()use(&$called) { + $called = true; + }; + + $sut = new Response(500); + $sut->setExitCallback($exitCallback); + $sut->abort(503); + self::assertTrue($called); + self::assertSame(503, $sut->getStatusCode()); + } + public function testGetReasonPhraseDefault() { $notFound = new Response(404); self::assertEquals("Not Found", $notFound->getReasonPhrase());