diff --git a/app/services_controllers.php b/app/services_controllers.php index 343a526037..26c18d1a5d 100644 --- a/app/services_controllers.php +++ b/app/services_controllers.php @@ -251,7 +251,7 @@ return [ ], Database\Structure\ChangePrefixFormController::class => [ 'class' => Database\Structure\ChangePrefixFormController::class, - 'arguments' => ['$response' => '@response'], + 'arguments' => ['@response', '@' . ResponseFactory::class, '@template'], ], Database\Structure\CopyFormController::class => [ 'class' => Database\Structure\CopyFormController::class, diff --git a/psalm-baseline.xml b/psalm-baseline.xml index d5580946b4..79018c4110 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -1329,11 +1329,6 @@ - - - - - diff --git a/src/Controllers/Database/Structure/ChangePrefixFormController.php b/src/Controllers/Database/Structure/ChangePrefixFormController.php index c034db49fd..0672c5c7c4 100644 --- a/src/Controllers/Database/Structure/ChangePrefixFormController.php +++ b/src/Controllers/Database/Structure/ChangePrefixFormController.php @@ -6,16 +6,21 @@ namespace PhpMyAdmin\Controllers\Database\Structure; use PhpMyAdmin\Controllers\InvocableController; use PhpMyAdmin\Current; +use PhpMyAdmin\Http\Factory\ResponseFactory; use PhpMyAdmin\Http\Response; use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\ResponseRenderer; +use PhpMyAdmin\Template; use function __; final class ChangePrefixFormController implements InvocableController { - public function __construct(private readonly ResponseRenderer $response) - { + public function __construct( + private readonly ResponseRenderer $response, + private readonly ResponseFactory $responseFactory, + private readonly Template $template, + ) { } public function __invoke(ServerRequest $request): Response|null @@ -40,12 +45,14 @@ final class ChangePrefixFormController implements InvocableController $urlParams['selected'][] = $selectedValue; } - $this->response->disable(); - $this->response->render('database/structure/change_prefix_form', [ + $response = $this->responseFactory->createResponse(); + foreach ($this->response->getHeader()->getHttpHeaders() as $name => $value) { + $response = $response->withHeader($name, $value); + } + + return $response->write($this->template->render('database/structure/change_prefix_form', [ 'route' => $route, 'url_params' => $urlParams, - ]); - - return null; + ])); } } diff --git a/tests/unit/Controllers/Database/Structure/ChangePrefixFormControllerTest.php b/tests/unit/Controllers/Database/Structure/ChangePrefixFormControllerTest.php new file mode 100644 index 0000000000..fbc540a871 --- /dev/null +++ b/tests/unit/Controllers/Database/Structure/ChangePrefixFormControllerTest.php @@ -0,0 +1,42 @@ +createServerRequest('POST', 'http://example.com/') + ->withQueryParams(['db' => 'test_db']) + ->withParsedBody(['selected_tbl' => ['test_table']]); + + $template = new Template(); + $controller = new ChangePrefixFormController(new ResponseRenderer(), ResponseFactory::create(), $template); + $response = $controller($request); + + $expected = $template->render('database/structure/change_prefix_form', [ + 'route' => '/database/structure/replace-prefix', + 'url_params' => ['db' => 'test_db', 'selected' => ['test_table']], + ]); + + self::assertNotNull($response); + self::assertSame(StatusCodeInterface::STATUS_OK, $response->getStatusCode()); + self::assertSame(['text/html; charset=utf-8'], $response->getHeader('Content-Type')); + self::assertSame($expected, (string) $response->getBody()); + } +}