Skip to content

Commit 6bc7ece

Browse files
committed
add a check for the request instance in FormRequest
1 parent c7b87bc commit 6bc7ece

2 files changed

Lines changed: 26 additions & 1 deletion

File tree

system/HTTP/FormRequest.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
namespace CodeIgniter\HTTP;
1515

16+
use CodeIgniter\Exceptions\RuntimeException;
1617
use ReflectionNamedType;
1718
use ReflectionParameter;
1819

@@ -40,7 +41,15 @@ abstract class FormRequest
4041
*/
4142
final public function __construct(?IncomingRequest $request = null)
4243
{
43-
$this->request = $request ?? service('request');
44+
$request ??= service('request');
45+
46+
if (! $request instanceof IncomingRequest) {
47+
throw new RuntimeException(
48+
sprintf('%s requires an IncomingRequest instance, got %s.', static::class, $request::class),
49+
);
50+
}
51+
52+
$this->request = $request;
4453
}
4554

4655
/**

tests/system/HTTP/FormRequestTest.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
namespace CodeIgniter\HTTP;
1515

1616
use CodeIgniter\Config\Services;
17+
use CodeIgniter\Exceptions\RuntimeException;
1718
use CodeIgniter\Superglobals;
1819
use CodeIgniter\Test\CIUnitTestCase;
1920
use CodeIgniter\Test\Mock\MockCodeIgniter;
@@ -129,6 +130,21 @@ public function testDefaultAuthorizeReturnsTrue(): void
129130
$this->assertTrue($formRequest->isAuthorized());
130131
}
131132

133+
public function testConstructorThrowsWhenFallbackRequestIsNotIncomingRequest(): void
134+
{
135+
Services::injectMock('request', new CLIRequest(new App()));
136+
137+
$this->expectException(RuntimeException::class);
138+
$this->expectExceptionMessage('requires an IncomingRequest instance');
139+
140+
new class () extends FormRequest {
141+
public function rules(): array
142+
{
143+
return [];
144+
}
145+
};
146+
}
147+
132148
public function testValidatedReturnsEmptyArrayBeforeResolution(): void
133149
{
134150
$formRequest = $this->makeFormRequest($this->makeRequest());

0 commit comments

Comments
 (0)