registerComplexRequirement( * new DynamicConfigRequirement( * $config, * 'Sitename', * 'Foo' * ) * ); * ``` * * registers a requirement that will evaluate to true only when `mediawiki/includes/Setup.php` has * finished executing (after all service wiring has executed). I.e., every call to * `Requirement->isMet()` reinterrogates the Config object for the current state and returns it. * Contrast to * * ```lang=php * $featureManager->registerRequirement( * 'Foo', * $config->get( 'Sitename' ) * ); * ``` * * wherein state is evaluated only once at registration time and permanently cached. * * NOTE: This API hasn't settled. It may change at any time without warning. Please don't bind to * it unless you absolutely need to * * @unstable * * @package FeatureManagement * @internal */ final class DynamicConfigRequirement implements Requirement { /** * @var \Config */ private $config; /** * @var string */ private $configName; /** * @var string */ private $requirementName; /** * @param \Config $config * @param string $configName Any `Config` key. This name is used to query `$config` state. E.g., * `'DBname'`. See https://www.mediawiki.org/wiki/Manual:Configuration_settings * @param string $requirementName The name of the requirement presented to FeatureManager. * This name _usually_ matches the `$configName` parameter for simplicity but allows for * abstraction as needed. See `Requirement->getName()`. */ public function __construct( \Config $config, string $configName, string $requirementName ) { $this->config = $config; $this->configName = $configName; $this->requirementName = $requirementName; } /** * @inheritDoc */ public function getName() : string { return $this->requirementName; } /** * @inheritDoc */ public function isMet() : bool { return (bool)$this->config->get( $this->configName ); } }