diff --git a/typo3/sysext/core/Classes/Utility/GeneralUtility.php b/typo3/sysext/core/Classes/Utility/GeneralUtility.php index 8e604db0207e27b71688c8532356ca2f64cb43f4..c1c08ffdc5b642d054399028900023da5e31d0c8 100644 --- a/typo3/sysext/core/Classes/Utility/GeneralUtility.php +++ b/typo3/sysext/core/Classes/Utility/GeneralUtility.php @@ -186,7 +186,7 @@ class GeneralUtility * * @param string $var Optional pointer to value in GET array (basically name of GET var) * @return mixed If $var is set it returns the value of $_GET[$var]. If $var is NULL (default), returns $_GET itself. In any case *slashes are stipped from the output!* - * @see _POST(), _GP(), _GETset() + * @see _POST(), _GP() */ public static function _GET($var = null) { @@ -223,9 +223,11 @@ class GeneralUtility * * @param mixed $inputGet * @param string $key + * @deprecated since TYPO3 v9 LTS, will be removed in TYPO3 v10.0. */ public static function _GETset($inputGet, $key = '') { + trigger_error('GeneralUtility::_GETset() will be removed in TYPO3 v10.0. Use a PSR-15 middleware to set query parameters on the request object or set $_GET directly.', E_USER_DEPRECATED); if ($key != '') { if (strpos($key, '|') !== false) { $pieces = explode('|', $key); diff --git a/typo3/sysext/core/Documentation/Changelog/master/Deprecation-86389-GeneralUtility_GETsetAndTSFE-mergingWithGetVars.rst b/typo3/sysext/core/Documentation/Changelog/master/Deprecation-86389-GeneralUtility_GETsetAndTSFE-mergingWithGetVars.rst new file mode 100644 index 0000000000000000000000000000000000000000..6e878cdae7b49e286815aa653a236c7b9e28ee94 --- /dev/null +++ b/typo3/sysext/core/Documentation/Changelog/master/Deprecation-86389-GeneralUtility_GETsetAndTSFE-mergingWithGetVars.rst @@ -0,0 +1,42 @@ +.. include:: ../../Includes.txt + +============================================================================== +Deprecation: #86389 - GeneralUtility::_GETset() and TSFE->mergingWithGetVars() +============================================================================== + +See :issue:`86389` + +Description +=========== + +Two methods related to setting global $_GET parameter have been deprecated: + +* :php:`TYPO3\CMS\Core\Utility\GeneralUtility::_GETset()` +* :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->mergingWithGetVars()` + +The two methods are wrappers to set the `$_GET` properties, however, this concept has been superseded +by using the PSR-7 request object within PSR-15 middlewares to replace the variables. + + +Impact +====== + +Calling any of the two methods within PHP will trigger a deprecation message. + + +Affected Installations +====================== + +Any installation making use of these methods within a TYPO3 extension, e.g. RealURL. + + +Migration +========= + +Implement a custom PSR-15 middleware to update the PSR-7 request object, and to manually set `$_GET` on top, +as long as TYPO3 still supports `GeneralUtility::_GP()`, although these methods will vanish in the near future. + +Relying on the request object, and using PSR-15 middlewares to manipulate request parameters is more future-proof +for extensions and TYPO3 sites. + +.. index:: Frontend, PHP-API, FullyScanned \ No newline at end of file diff --git a/typo3/sysext/core/Tests/Unit/Utility/GeneralUtilityTest.php b/typo3/sysext/core/Tests/Unit/Utility/GeneralUtilityTest.php index 623f005bb5bc55c3d3e1843578a29336c31b0330..9d8b2101a2a402ef97a00dd7da771f13a4c25337 100644 --- a/typo3/sysext/core/Tests/Unit/Utility/GeneralUtilityTest.php +++ b/typo3/sysext/core/Tests/Unit/Utility/GeneralUtilityTest.php @@ -219,39 +219,6 @@ class GeneralUtilityTest extends UnitTestCase $this->assertSame($expected, GeneralUtility::_POST($key)); } - /////////////////////////////// - // Tests concerning _GETset - /////////////////////////////// - /** - * @test - * @dataProvider getSetDataProvider - */ - public function canSetNewGetInputValues($input, $key, $expected, $getPreset = []) - { - $_GET = $getPreset; - GeneralUtility::_GETset($input, $key); - $this->assertSame($expected, $_GET); - } - - /** - * Data provider for canSetNewGetInputValues - * - * @return array - */ - public function getSetDataProvider() - { - return [ - 'No input data used without target key' => [null, null, []], - 'No input data used with target key' => ['', 'cake', ['cake' => '']], - 'No target key used with string input data' => ['data', null, []], - 'No target key used with array input data' => [['cake' => 'lie'], null, ['cake' => 'lie']], - 'Target key and string input data' => ['lie', 'cake', ['cake' => 'lie']], - 'Replace existing GET data' => ['lie', 'cake', ['cake' => 'lie'], ['cake' => 'is a lie']], - 'Target key pointing to sublevels and string input data' => ['lie', 'cake|is', ['cake' => ['is' => 'lie']]], - 'Target key pointing to sublevels and array input data' => [['a' => 'lie'], 'cake|is', ['cake' => ['is' => ['a' => 'lie']]]] - ]; - } - /////////////////////////// // Tests concerning cmpIPv4 /////////////////////////// @@ -2374,105 +2341,6 @@ class GeneralUtilityTest extends UnitTestCase $this->assertSame('\'' . $expected . '\'', GeneralUtility::quoteJSvalue($input)); } - /////////////////////////////// - // Tests concerning _GETset() - /////////////////////////////// - /** - * @test - */ - public function getSetWritesArrayToGetSystemVariable() - { - $_GET = []; - $GLOBALS['HTTP_GET_VARS'] = []; - $getParameters = ['foo' => 'bar']; - GeneralUtility::_GETset($getParameters); - $this->assertSame($getParameters, $_GET); - } - - /** - * @test - */ - public function getSetWritesArrayToGlobalsHttpGetVars() - { - $_GET = []; - $GLOBALS['HTTP_GET_VARS'] = []; - $getParameters = ['foo' => 'bar']; - GeneralUtility::_GETset($getParameters); - $this->assertSame($getParameters, $GLOBALS['HTTP_GET_VARS']); - } - - /** - * @test - */ - public function getSetForArrayDropsExistingValues() - { - $_GET = []; - $GLOBALS['HTTP_GET_VARS'] = []; - GeneralUtility::_GETset(['foo' => 'bar']); - GeneralUtility::_GETset(['oneKey' => 'oneValue']); - $this->assertEquals(['oneKey' => 'oneValue'], $GLOBALS['HTTP_GET_VARS']); - } - - /** - * @test - */ - public function getSetAssignsOneValueToOneKey() - { - $_GET = []; - $GLOBALS['HTTP_GET_VARS'] = []; - GeneralUtility::_GETset('oneValue', 'oneKey'); - $this->assertEquals('oneValue', $GLOBALS['HTTP_GET_VARS']['oneKey']); - } - - /** - * @test - */ - public function getSetForOneValueDoesNotDropUnrelatedValues() - { - $_GET = []; - $GLOBALS['HTTP_GET_VARS'] = []; - GeneralUtility::_GETset(['foo' => 'bar']); - GeneralUtility::_GETset('oneValue', 'oneKey'); - $this->assertEquals(['foo' => 'bar', 'oneKey' => 'oneValue'], $GLOBALS['HTTP_GET_VARS']); - } - - /** - * @test - */ - public function getSetCanAssignsAnArrayToASpecificArrayElement() - { - $_GET = []; - $GLOBALS['HTTP_GET_VARS'] = []; - GeneralUtility::_GETset(['childKey' => 'oneValue'], 'parentKey'); - $this->assertEquals(['parentKey' => ['childKey' => 'oneValue']], $GLOBALS['HTTP_GET_VARS']); - } - - /** - * @test - */ - public function getSetCanAssignAStringValueToASpecificArrayChildElement() - { - $_GET = []; - $GLOBALS['HTTP_GET_VARS'] = []; - GeneralUtility::_GETset('oneValue', 'parentKey|childKey'); - $this->assertEquals(['parentKey' => ['childKey' => 'oneValue']], $GLOBALS['HTTP_GET_VARS']); - } - - /** - * @test - */ - public function getSetCanAssignAnArrayToASpecificArrayChildElement() - { - $_GET = []; - $GLOBALS['HTTP_GET_VARS'] = []; - GeneralUtility::_GETset(['key1' => 'value1', 'key2' => 'value2'], 'parentKey|childKey'); - $this->assertEquals([ - 'parentKey' => [ - 'childKey' => ['key1' => 'value1', 'key2' => 'value2'] - ] - ], $GLOBALS['HTTP_GET_VARS']); - } - /////////////////////////// // Tests concerning minifyJavaScript /////////////////////////// diff --git a/typo3/sysext/core/Tests/UnitDeprecated/Utility/GeneralUtilityTest.php b/typo3/sysext/core/Tests/UnitDeprecated/Utility/GeneralUtilityTest.php index c5626d20dbe8e493fa91b567cc8ed35fbd09949e..1d572e405e45cd087a18b225d46a4847b25806de 100644 --- a/typo3/sysext/core/Tests/UnitDeprecated/Utility/GeneralUtilityTest.php +++ b/typo3/sysext/core/Tests/UnitDeprecated/Utility/GeneralUtilityTest.php @@ -270,4 +270,133 @@ class GeneralUtilityTest extends UnitTestCase { $this->assertEquals($expected, GeneralUtility::explodeUrl2Array($input, true)); } + + /////////////////////////////// + // Tests concerning _GETset() + /////////////////////////////// + /** + * @test + */ + public function getSetWritesArrayToGetSystemVariable() + { + $_GET = []; + $GLOBALS['HTTP_GET_VARS'] = []; + $getParameters = ['foo' => 'bar']; + GeneralUtility::_GETset($getParameters); + $this->assertSame($getParameters, $_GET); + } + + /** + * @test + */ + public function getSetWritesArrayToGlobalsHttpGetVars() + { + $_GET = []; + $GLOBALS['HTTP_GET_VARS'] = []; + $getParameters = ['foo' => 'bar']; + GeneralUtility::_GETset($getParameters); + $this->assertSame($getParameters, $GLOBALS['HTTP_GET_VARS']); + } + + /** + * @test + */ + public function getSetForArrayDropsExistingValues() + { + $_GET = []; + $GLOBALS['HTTP_GET_VARS'] = []; + GeneralUtility::_GETset(['foo' => 'bar']); + GeneralUtility::_GETset(['oneKey' => 'oneValue']); + $this->assertEquals(['oneKey' => 'oneValue'], $GLOBALS['HTTP_GET_VARS']); + } + + /** + * @test + */ + public function getSetAssignsOneValueToOneKey() + { + $_GET = []; + $GLOBALS['HTTP_GET_VARS'] = []; + GeneralUtility::_GETset('oneValue', 'oneKey'); + $this->assertEquals('oneValue', $GLOBALS['HTTP_GET_VARS']['oneKey']); + } + + /** + * @test + */ + public function getSetForOneValueDoesNotDropUnrelatedValues() + { + $_GET = []; + $GLOBALS['HTTP_GET_VARS'] = []; + GeneralUtility::_GETset(['foo' => 'bar']); + GeneralUtility::_GETset('oneValue', 'oneKey'); + $this->assertEquals(['foo' => 'bar', 'oneKey' => 'oneValue'], $GLOBALS['HTTP_GET_VARS']); + } + + /** + * @test + */ + public function getSetCanAssignsAnArrayToASpecificArrayElement() + { + $_GET = []; + $GLOBALS['HTTP_GET_VARS'] = []; + GeneralUtility::_GETset(['childKey' => 'oneValue'], 'parentKey'); + $this->assertEquals(['parentKey' => ['childKey' => 'oneValue']], $GLOBALS['HTTP_GET_VARS']); + } + + /** + * @test + */ + public function getSetCanAssignAStringValueToASpecificArrayChildElement() + { + $_GET = []; + $GLOBALS['HTTP_GET_VARS'] = []; + GeneralUtility::_GETset('oneValue', 'parentKey|childKey'); + $this->assertEquals(['parentKey' => ['childKey' => 'oneValue']], $GLOBALS['HTTP_GET_VARS']); + } + + /** + * @test + */ + public function getSetCanAssignAnArrayToASpecificArrayChildElement() + { + $_GET = []; + $GLOBALS['HTTP_GET_VARS'] = []; + GeneralUtility::_GETset(['key1' => 'value1', 'key2' => 'value2'], 'parentKey|childKey'); + $this->assertEquals([ + 'parentKey' => [ + 'childKey' => ['key1' => 'value1', 'key2' => 'value2'] + ] + ], $GLOBALS['HTTP_GET_VARS']); + } + + /** + * @test + * @dataProvider getSetDataProvider + */ + public function canSetNewGetInputValues($input, $key, $expected, $getPreset = []) + { + $_GET = $getPreset; + GeneralUtility::_GETset($input, $key); + $this->assertSame($expected, $_GET); + } + + /** + * Data provider for canSetNewGetInputValues + * + * @return array + */ + public function getSetDataProvider() + { + return [ + 'No input data used without target key' => [null, null, []], + 'No input data used with target key' => ['', 'cake', ['cake' => '']], + 'No target key used with string input data' => ['data', null, []], + 'No target key used with array input data' => [['cake' => 'lie'], null, ['cake' => 'lie']], + 'Target key and string input data' => ['lie', 'cake', ['cake' => 'lie']], + 'Replace existing GET data' => ['lie', 'cake', ['cake' => 'lie'], ['cake' => 'is a lie']], + 'Target key pointing to sublevels and string input data' => ['lie', 'cake|is', ['cake' => ['is' => 'lie']]], + 'Target key pointing to sublevels and array input data' => [['a' => 'lie'], 'cake|is', ['cake' => ['is' => ['a' => 'lie']]]] + ]; + } } diff --git a/typo3/sysext/extbase/Tests/Unit/Configuration/BackendConfigurationManagerTest.php b/typo3/sysext/extbase/Tests/Unit/Configuration/BackendConfigurationManagerTest.php index 1f004812af8d989190417c6a188143fa19194437..4f64722346aff08f05d345f4e53949d250764b6e 100644 --- a/typo3/sysext/extbase/Tests/Unit/Configuration/BackendConfigurationManagerTest.php +++ b/typo3/sysext/extbase/Tests/Unit/Configuration/BackendConfigurationManagerTest.php @@ -47,7 +47,7 @@ class BackendConfigurationManagerTest extends \TYPO3\TestingFramework\Core\Unit\ */ public function getCurrentPageIdReturnsPageIdFromGet() { - \TYPO3\CMS\Core\Utility\GeneralUtility::_GETset(['id' => 123]); + $_GET['id'] = 123; $expectedResult = 123; $actualResult = $this->backendConfigurationManager->_call('getCurrentPageId'); $this->assertEquals($expectedResult, $actualResult); @@ -58,7 +58,7 @@ class BackendConfigurationManagerTest extends \TYPO3\TestingFramework\Core\Unit\ */ public function getCurrentPageIdReturnsPageIdFromPost() { - \TYPO3\CMS\Core\Utility\GeneralUtility::_GETset(['id' => 123]); + $_GET['id'] = 123; $_POST['id'] = 321; $expectedResult = 321; $actualResult = $this->backendConfigurationManager->_call('getCurrentPageId'); diff --git a/typo3/sysext/extbase/Tests/Unit/Mvc/Web/Routing/UriBuilderTest.php b/typo3/sysext/extbase/Tests/Unit/Mvc/Web/Routing/UriBuilderTest.php index 439a6c9a7d0e89c0ab0a0209175a9ad9df1c1d47..38a36fcda061b5626e05320c2c82e59bcd30268d 100644 --- a/typo3/sysext/extbase/Tests/Unit/Mvc/Web/Routing/UriBuilderTest.php +++ b/typo3/sysext/extbase/Tests/Unit/Mvc/Web/Routing/UriBuilderTest.php @@ -220,7 +220,9 @@ class UriBuilderTest extends UnitTestCase */ public function buildBackendUriKeepsQueryParametersIfAddQueryStringIsSet() { - GeneralUtility::_GETset(['route' => '/test/Path', 'id' => 'pageId', 'foo' => 'bar']); + $_GET['route'] = '/test/Path'; + $_GET['id'] = 'pageId'; + $_GET['foo'] = 'bar'; $_POST = []; $_POST['foo2'] = 'bar2'; $this->uriBuilder->setAddQueryString(true); @@ -235,7 +237,9 @@ class UriBuilderTest extends UnitTestCase */ public function buildBackendUriKeepsQueryParametersIfAddQueryStringMethodIsNotSet() { - GeneralUtility::_GETset(['route' => '/test/Path', 'id' => 'pageId', 'foo' => 'bar']); + $_GET['route'] = '/test/Path'; + $_GET['id'] = 'pageId'; + $_GET['foo'] = 'bar'; $_POST = []; $_POST['foo2'] = 'bar2'; $this->uriBuilder->setAddQueryString(true); @@ -330,7 +334,7 @@ class UriBuilderTest extends UnitTestCase */ public function buildBackendUriRemovesSpecifiedQueryParametersIfArgumentsToBeExcludedFromQueryStringIsSet(array $parameters, array $postArguments, array $excluded, $expected) { - GeneralUtility::_GETset($parameters); + $_GET = array_replace_recursive($_GET, $parameters); $_POST = $postArguments; $this->uriBuilder->setAddQueryString(true); $this->uriBuilder->setAddQueryStringMethod('GET,POST'); @@ -344,7 +348,7 @@ class UriBuilderTest extends UnitTestCase */ public function buildBackendUriKeepsModuleQueryParametersIfAddQueryStringIsNotSet() { - GeneralUtility::_GETset(['route' => '/test/Path', 'id' => 'pageId', 'foo' => 'bar']); + $_GET = (['route' => '/test/Path', 'id' => 'pageId', 'foo' => 'bar']); $expectedResult = '/typo3/index.php?route=%2Ftest%2FPath&token=dummyToken&id=pageId'; $actualResult = $this->uriBuilder->buildBackendUri(); $this->assertEquals($expectedResult, $actualResult); @@ -355,7 +359,7 @@ class UriBuilderTest extends UnitTestCase */ public function buildBackendUriMergesAndOverrulesQueryParametersWithArguments() { - GeneralUtility::_GETset(['route' => '/test/Path', 'id' => 'pageId', 'foo' => 'bar']); + $_GET = ['route' => '/test/Path', 'id' => 'pageId', 'foo' => 'bar']; $this->uriBuilder->setArguments(['route' => '/test/Path2', 'somePrefix' => ['bar' => 'baz']]); $expectedResult = '/typo3/index.php?route=%2Ftest%2FPath2&token=dummyToken&id=pageId&somePrefix%5Bbar%5D=baz'; $actualResult = $this->uriBuilder->buildBackendUri(); @@ -367,7 +371,7 @@ class UriBuilderTest extends UnitTestCase */ public function buildBackendUriConvertsDomainObjectsAfterArgumentsHaveBeenMerged() { - GeneralUtility::_GETset(['route' => '/test/Path']); + $_GET['route'] = '/test/Path'; $mockDomainObject = $this->getAccessibleMock(AbstractEntity::class, ['dummy']); $mockDomainObject->_set('uid', '123'); $this->uriBuilder->setArguments(['somePrefix' => ['someDomainObject' => $mockDomainObject]]); @@ -381,7 +385,7 @@ class UriBuilderTest extends UnitTestCase */ public function buildBackendUriRespectsSection() { - GeneralUtility::_GETset(['route' => '/test/Path']); + $_GET['route'] = '/test/Path'; $this->uriBuilder->setSection('someSection'); $expectedResult = '/typo3/index.php?route=%2Ftest%2FPath&token=dummyToken#someSection'; $actualResult = $this->uriBuilder->buildBackendUri(); @@ -393,7 +397,7 @@ class UriBuilderTest extends UnitTestCase */ public function buildBackendUriCreatesAbsoluteUrisIfSpecified() { - GeneralUtility::_GETset(['route' => '/test/Path']); + $_GET['route'] = '/test/Path'; $_SERVER['HTTP_HOST'] = 'baseuri'; $_SERVER['SCRIPT_NAME'] = '/typo3/index.php'; $_SERVER['ORIG_SCRIPT_NAME'] = '/typo3/index.php'; diff --git a/typo3/sysext/frontend/Classes/Controller/TypoScriptFrontendController.php b/typo3/sysext/frontend/Classes/Controller/TypoScriptFrontendController.php index c11e0e4833d2239971d82c9d28a4f43cedef5361..fe3f4a7fff5e0d720e1e8b6c217d8af33f741f94 100644 --- a/typo3/sysext/frontend/Classes/Controller/TypoScriptFrontendController.php +++ b/typo3/sysext/frontend/Classes/Controller/TypoScriptFrontendController.php @@ -103,6 +103,7 @@ class TypoScriptFrontendController implements LoggerAwareInterface 'clearPageCacheContent_pidList' => 'Using $TSFE->clearPageCacheContent_pidList() has been marked as internal as its purpose is to be managed from within TSFE directly.', 'setSysLastChanged' => 'Using $TSFE->setSysLastChanged() has been marked as internal as its purpose is to be managed from within TSFE directly.', 'contentStrReplace' => 'Using $TSFE->contentStrReplace() has been marked as internal as its purpose is to be managed from within TSFE directly.', + 'mergingWithGetVars' => '$TSFE->mergingWithGetVars() will be removed in TYPO3 v10.0. Use a middleware instead to override the PSR-7 request object AND set $_GET on top to achieve the same result.', ]; /** @@ -1663,7 +1664,10 @@ class TypoScriptFrontendController implements LoggerAwareInterface $this->context->setAspect('language', GeneralUtility::makeInstance(LanguageAspect::class, $languageId)); $this->id = $this->page['uid']; // For common best-practice reasons, this is set, however, will be optional for new routing mechanisms - $this->mergingWithGetVars(['L' => $languageId]); + if (!$this->getCurrentSiteLanguage()) { + $_GET['L'] = $languageId; + $GLOBALS['HTTP_GET_VARS']['L'] = $languageId; + } } /** @@ -2182,8 +2186,9 @@ class TypoScriptFrontendController implements LoggerAwareInterface * Merging values into the global $_GET * * @param array $GET_VARS Array of key/value pairs that will be merged into the current GET-vars. (Non-escaped values) + * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. This was mainly used in RealURL to set $id etc. but should be done manually instead. */ - public function mergingWithGetVars($GET_VARS) + protected function mergingWithGetVars($GET_VARS) { if (is_array($GET_VARS)) { // Getting $_GET var, unescaped. @@ -2193,8 +2198,9 @@ class TypoScriptFrontendController implements LoggerAwareInterface } // Merge new values on top: ArrayUtility::mergeRecursiveWithOverrule($realGet, $GET_VARS); - // Write values back to $_GET: - GeneralUtility::_GETset($realGet); + // Write values back to $_GET + $_GET = $realGet; + $GLOBALS['HTTP_GET_VARS'] = $realGet; // Setting these specifically (like in the init-function): if (isset($GET_VARS['type'])) { $this->type = (int)$GET_VARS['type']; @@ -2638,7 +2644,8 @@ class TypoScriptFrontendController implements LoggerAwareInterface if (!empty($this->config['config']['defaultGetVars.'])) { $modifiedGetVars = GeneralUtility::removeDotsFromTS($this->config['config']['defaultGetVars.']); ArrayUtility::mergeRecursiveWithOverrule($modifiedGetVars, GeneralUtility::_GET()); - GeneralUtility::_GETset($modifiedGetVars); + $_GET = $modifiedGetVars; + $GLOBALS['HTTP_GET_VARS'] = $modifiedGetVars; } // Auto-configure settings when a site is configured diff --git a/typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallMatcher.php b/typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallMatcher.php index 56ecdd234ca01dfa9c795cd0b9875864f4315e12..394e2c13486801529129a2255c84b1e0bf7b4f7f 100644 --- a/typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallMatcher.php +++ b/typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallMatcher.php @@ -3523,4 +3523,11 @@ return [ 'Deprecation-86366-MethodsInAbstractUpdate.rst' ], ], + 'TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->mergingWithGetVars' => [ + 'numberOfMandatoryArguments' => 1, + 'maximumNumberOfArguments' => 1, + 'restFiles' => [ + 'Deprecation-86389-GeneralUtility_GETsetAndTSFE-mergingWithGetVars.rst', + ], + ], ]; diff --git a/typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallStaticMatcher.php b/typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallStaticMatcher.php index 3a99aea7f02fbc0ad92a6564327192a9999df507..b7067b5d5890e4dc69232510c7c6f49ceab4a89a 100644 --- a/typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallStaticMatcher.php +++ b/typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallStaticMatcher.php @@ -785,4 +785,11 @@ return [ 'Deprecation-85892-VariousMethodsRegardingSysDomainResolving.rst', ], ], + 'TYPO3\CMS\Core\Utility\GeneralUtility::_GETset' => [ + 'numberOfMandatoryArguments' => 1, + 'maximumNumberOfArguments' => 2, + 'restFiles' => [ + 'Deprecation-86389-GeneralUtility_GETsetAndTSFE-mergingWithGetVars.rst', + ], + ], ];