function DeprecationHelper::backwardsCompatibleCall

Same name in other branches
  1. 10 core/lib/Drupal/Component/Utility/DeprecationHelper.php \Drupal\Component\Utility\DeprecationHelper::backwardsCompatibleCall()

Helper to run a callback based on the installed version of a project.

With this helper, contributed or custom modules can run different code paths based on the version of a project (e.g. Drupal) using callbacks.

The below templates help code editors and PHPStan understand the return value of this function.

@template Current @template Deprecated

Parameters

string $currentVersion: Version to check against.

string $deprecatedVersion: Version that deprecated the old code path.

callable(): Current $currentCallable: Callback for the current version.

callable(): Deprecated $deprecatedCallable: Callback for deprecated code path.

Return value

Current|Deprecated The method to invoke based on the current version and the version of the deprecation. The current callback when the current version is greater than or equal to the version of the deprecation. Otherwise, the deprecated callback.

1 call to DeprecationHelper::backwardsCompatibleCall()
DeprecationHelperTest::testDeprecationHelper in core/tests/Drupal/Tests/Component/Utility/DeprecationHelperTest.php
@dataProvider deprecatedHelperTestCases

File

core/lib/Drupal/Component/Utility/DeprecationHelper.php, line 39

Class

DeprecationHelper
Provides a helper method for handling deprecated code paths in projects.

Namespace

Drupal\Component\Utility

Code

public static function backwardsCompatibleCall(string $currentVersion, string $deprecatedVersion, callable $currentCallable, callable $deprecatedCallable) : mixed {
    // Normalize the version string when it's a dev version to the first point
    // release of that minor. E.g. 10.2.x-dev and 10.2-dev both translate to
    // 10.2.0
    $normalizedVersion = str_ends_with($currentVersion, '-dev') ? str_replace([
        '.x-dev',
        '-dev',
    ], '.0', $currentVersion) : $currentVersion;
    return version_compare($normalizedVersion, $deprecatedVersion, '>=') ? $currentCallable() : $deprecatedCallable();
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.