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());
+ }
+}