From 2ef50bd2b78f82c806ac621a4947fed15d3e6586 Mon Sep 17 00:00:00 2001 From: Nicklas Mantek Date: Tue, 30 Sep 2025 17:08:03 +0200 Subject: [PATCH 1/6] add buildUri function --- .../Middleware/MiddlewareActionAbstract.php | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/Classes/Middleware/MiddlewareActionAbstract.php b/Classes/Middleware/MiddlewareActionAbstract.php index 89abd4c..781e4c5 100644 --- a/Classes/Middleware/MiddlewareActionAbstract.php +++ b/Classes/Middleware/MiddlewareActionAbstract.php @@ -6,6 +6,7 @@ namespace JAKOTA\Typo3ToolBox\Middleware; use Psr\Http\Message\ServerRequestInterface; +use Psr\Http\Message\UriInterface; use TYPO3\CMS\Core\Context\Context; use TYPO3\CMS\Core\Context\LanguageAspect; use TYPO3\CMS\Core\Context\UserAspect; @@ -126,6 +127,33 @@ public function __construct(ServerRequestInterface $request, $pathParams) { $this->uriBuilder = GeneralUtility::makeInstance(UriBuilder::class); } + /** + * Function to build urls without using $this->uriBuilder. + * + * @param null|string $extensionName Extension name without underscores. Eg. 'myextension' + * @param null|string $pluginName Plugin name with underscores. Eg. 'news_show' or 'records_list' + * @param null|string $actionName Action name (the 'show' of 'news_show') + * @param null|string $controllerName Name of the controller. Eg. 'News' or 'Record' + * @param null|array $actionArguments Additional arguments needed for the Action. Eg. [newsId => 123, ...] + */ + protected function buildUri(int $pageId, ?string $extensionName = null, ?string $pluginName = null, ?string $actionName = null, ?string $controllerName = null, ?array $actionArguments = null): ?UriInterface { + if (null === $this->site->getRouter()) { + return null; + } + + if (null !== $extensionName && null !== $pluginName && null !== $actionName && null !== $controllerName) { + $arguments = [ + strtolower("tx_{$extensionName}_{$pluginName}") => [ + 'action' => $actionName, + 'controller' => $controllerName, + ...$actionArguments, + ], + ]; + } + + return $this->site->getRouter()->generateUri($this->site->getAttribute('shipDetailPageUid'), $arguments); + } + protected function getAbsPath(?FileReference $file): string { if (null == $file) { return ''; From de74618643bef6e6feb53e290d1b55fc3e9ff4b4 Mon Sep 17 00:00:00 2001 From: Nicklas Mantek Date: Tue, 30 Sep 2025 17:13:35 +0200 Subject: [PATCH 2/6] fix unset type --- Classes/Middleware/MiddlewareActionAbstract.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Classes/Middleware/MiddlewareActionAbstract.php b/Classes/Middleware/MiddlewareActionAbstract.php index 781e4c5..e003b90 100644 --- a/Classes/Middleware/MiddlewareActionAbstract.php +++ b/Classes/Middleware/MiddlewareActionAbstract.php @@ -151,7 +151,7 @@ protected function buildUri(int $pageId, ?string $extensionName = null, ?string ]; } - return $this->site->getRouter()->generateUri($this->site->getAttribute('shipDetailPageUid'), $arguments); + return $this->site->getRouter()->generateUri($this->site->getAttribute('shipDetailPageUid'), $arguments ?? []); } protected function getAbsPath(?FileReference $file): string { From b8f4ca40d9360bed0e7712e467693e3037a20c9e Mon Sep 17 00:00:00 2001 From: Nicklas Mantek Date: Tue, 30 Sep 2025 17:20:19 +0200 Subject: [PATCH 3/6] fix more bugs --- .../Middleware/MiddlewareActionAbstract.php | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/Classes/Middleware/MiddlewareActionAbstract.php b/Classes/Middleware/MiddlewareActionAbstract.php index e003b90..64f16f4 100644 --- a/Classes/Middleware/MiddlewareActionAbstract.php +++ b/Classes/Middleware/MiddlewareActionAbstract.php @@ -130,28 +130,33 @@ public function __construct(ServerRequestInterface $request, $pathParams) { /** * Function to build urls without using $this->uriBuilder. * - * @param null|string $extensionName Extension name without underscores. Eg. 'myextension' - * @param null|string $pluginName Plugin name with underscores. Eg. 'news_show' or 'records_list' - * @param null|string $actionName Action name (the 'show' of 'news_show') - * @param null|string $controllerName Name of the controller. Eg. 'News' or 'Record' - * @param null|array $actionArguments Additional arguments needed for the Action. Eg. [newsId => 123, ...] + * @param null|array $additionalGetParams Additional GET parameters. + * @param null|string $extensionName Extension name without underscores. Eg. 'myextension' + * @param null|string $pluginName Plugin name with underscores. Eg. 'news_show' or 'records_list' + * @param null|string $actionName Action name (the 'show' of 'news_show') + * @param null|string $controllerName Name of the controller. Eg. 'News' or 'Record' + * @param null|array $actionArguments Additional arguments needed for the Action. Eg. [newsId => 123, ...] */ - protected function buildUri(int $pageId, ?string $extensionName = null, ?string $pluginName = null, ?string $actionName = null, ?string $controllerName = null, ?array $actionArguments = null): ?UriInterface { - if (null === $this->site->getRouter()) { + protected function buildUri(int $pageId, ?array $additionalGetParams = [], ?string $extensionName = null, ?string $pluginName = null, ?string $actionName = null, ?string $controllerName = null, array $actionArguments = []): ?UriInterface { + if (null === ($this->site?->getRouter() ?? null)) { return null; } + $arguments = [ + ...$additionalGetParams + ]; + if (null !== $extensionName && null !== $pluginName && null !== $actionName && null !== $controllerName) { $arguments = [ strtolower("tx_{$extensionName}_{$pluginName}") => [ 'action' => $actionName, 'controller' => $controllerName, - ...$actionArguments, + $actionArguments, ], ]; } - return $this->site->getRouter()->generateUri($this->site->getAttribute('shipDetailPageUid'), $arguments ?? []); + return $this->site->getRouter()->generateUri($this->site->getAttribute('shipDetailPageUid'), $arguments); } protected function getAbsPath(?FileReference $file): string { From afe2c2ad7641726c7ef9be34c9d238f57473e859 Mon Sep 17 00:00:00 2001 From: Nicklas Mantek Date: Tue, 30 Sep 2025 17:21:12 +0200 Subject: [PATCH 4/6] re-add unpack --- Classes/Middleware/MiddlewareActionAbstract.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Classes/Middleware/MiddlewareActionAbstract.php b/Classes/Middleware/MiddlewareActionAbstract.php index 64f16f4..6e931be 100644 --- a/Classes/Middleware/MiddlewareActionAbstract.php +++ b/Classes/Middleware/MiddlewareActionAbstract.php @@ -151,7 +151,7 @@ protected function buildUri(int $pageId, ?array $additionalGetParams = [], ?stri strtolower("tx_{$extensionName}_{$pluginName}") => [ 'action' => $actionName, 'controller' => $controllerName, - $actionArguments, + ...$actionArguments, ], ]; } From a55e9a3d790535143308af18dc7c3d3572f664cf Mon Sep 17 00:00:00 2001 From: Nicklas Mantek Date: Tue, 30 Sep 2025 17:22:01 +0200 Subject: [PATCH 5/6] cleanup --- Classes/Middleware/MiddlewareActionAbstract.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Classes/Middleware/MiddlewareActionAbstract.php b/Classes/Middleware/MiddlewareActionAbstract.php index 6e931be..f05a3d7 100644 --- a/Classes/Middleware/MiddlewareActionAbstract.php +++ b/Classes/Middleware/MiddlewareActionAbstract.php @@ -130,20 +130,20 @@ public function __construct(ServerRequestInterface $request, $pathParams) { /** * Function to build urls without using $this->uriBuilder. * - * @param null|array $additionalGetParams Additional GET parameters. - * @param null|string $extensionName Extension name without underscores. Eg. 'myextension' - * @param null|string $pluginName Plugin name with underscores. Eg. 'news_show' or 'records_list' - * @param null|string $actionName Action name (the 'show' of 'news_show') - * @param null|string $controllerName Name of the controller. Eg. 'News' or 'Record' - * @param null|array $actionArguments Additional arguments needed for the Action. Eg. [newsId => 123, ...] + * @param array $additionalGetParams additional GET parameters + * @param null|string $extensionName Extension name without underscores. Eg. 'myextension' + * @param null|string $pluginName Plugin name with underscores. Eg. 'news_show' or 'records_list' + * @param null|string $actionName Action name (the 'show' of 'news_show') + * @param null|string $controllerName Name of the controller. Eg. 'News' or 'Record' + * @param array $actionArguments Additional arguments needed for the Action. Eg. [newsId => 123, ...] */ - protected function buildUri(int $pageId, ?array $additionalGetParams = [], ?string $extensionName = null, ?string $pluginName = null, ?string $actionName = null, ?string $controllerName = null, array $actionArguments = []): ?UriInterface { + protected function buildUri(int $pageId, array $additionalGetParams = [], ?string $extensionName = null, ?string $pluginName = null, ?string $actionName = null, ?string $controllerName = null, array $actionArguments = []): ?UriInterface { if (null === ($this->site?->getRouter() ?? null)) { return null; } $arguments = [ - ...$additionalGetParams + ...$additionalGetParams, ]; if (null !== $extensionName && null !== $pluginName && null !== $actionName && null !== $controllerName) { From 063192895ba1f4ea0efe64eedb2026e40d7e3646 Mon Sep 17 00:00:00 2001 From: Nicklas Mantek Date: Tue, 30 Sep 2025 17:23:37 +0200 Subject: [PATCH 6/6] set correct argument --- Classes/Middleware/MiddlewareActionAbstract.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Classes/Middleware/MiddlewareActionAbstract.php b/Classes/Middleware/MiddlewareActionAbstract.php index f05a3d7..e317fb5 100644 --- a/Classes/Middleware/MiddlewareActionAbstract.php +++ b/Classes/Middleware/MiddlewareActionAbstract.php @@ -156,7 +156,7 @@ protected function buildUri(int $pageId, array $additionalGetParams = [], ?strin ]; } - return $this->site->getRouter()->generateUri($this->site->getAttribute('shipDetailPageUid'), $arguments); + return $this->site->getRouter()->generateUri($pageId, $arguments); } protected function getAbsPath(?FileReference $file): string {