Příručka:Konfigurace pro vývojáře

From mediawiki.org
This page is a translated version of the page Manual:Configuration for developers and the translation is 100% complete.
Pro dokumentaci o konfiguraci MediaWiki viz Příručka:Konfigurování.

Toto je průvodce pro vývojáře jádra a rozšíření o vytváření a přístupu k nastavení konfigurace.

Pro jádro

Chcete-li získat přístup ke konfigurační proměnné, jako je $wgFoo:

$config = $this->getConfig(); // toto je objekt Config
$foo = $config->get( 'Foo' );

Pokud nemáte přístup k žádnému ContextSource, můžete získat objekt Config s

$config = MediaWikiServices::getInstance()->getMainConfig();

Toto by se nemělo používat k načítání objektů globálních proměnných, jako je $wgUser nebo $wgRequest .

Pro rozšíření

Konfigurace pomocí extension.json (doporučeno)

Rozšíření, která mají soubor extension.json, by měla nastavit konfigurační proměnné, jak je popsáno v této části.

Pokud se vaše rozšíření jmenuje YourExtension, do extension.json byste napsali:

{
	"config": {
		"YourExtensionSomeConfigKey": {
			"value": "SomeValue",
			"description": "The description for the configuration",
		}
	},
	"ConfigRegistry": {
		"yourextension": "GlobalVarConfig::newInstance"
	},
	"manifest_version": 2 
}

V PHP, kdykoli chcete své konfigurační hodnoty:

use MediaWiki\MediaWikiServices;
$config = MediaWikiServices::getInstance()->getConfigFactory()->makeConfig( 'yourextension' );
$user = $config->get( 'YourExtensionSomeConfigKey' );

Pokud předpona pro vaše konfigurační klíče není výchozí "wg", můžete ji zadat pomocí klíče config_prefix nebo _prefix v závislosti na verzi schématu (viz dokumenty). Měli byste se ujistit, že nekolidují s žádným existujícím rozšířením.

Důrazně se doporučuje začínat název konfiguračního klíče názvem vašeho rozšíření (jako v příkladu), abyste zajistili, že konfigurační klíč bude jedinečný mezi všemi klíči všech aplikací. Nedělat to je špatný nápad a pravděpodobně to přeruší používání atributů.

Konfigurace pomocí globals

Pokud můžete, použijte pro konfiguraci soubor extension.json (viz výše). Pokud nemůžete, použijte tento fragment (funguje pouze s proměnnými s předponou wg):

$wgConfigRegistry['yourextension'] = 'GlobalVarConfig::newInstance';

// Nyní, kdykoli budete chtít svůj konfigurační objekt
$config = ConfigFactory::getDefaultInstance()->makeConfig( 'yourextension' );

Vlastní předpony

V minulosti některá rozšíření používala "eg" místo "wg". Chceme opustit předpony, ale stále je můžete používat:

// V instalačním souboru vašeho rozšíření (ExtName.php)
wfExtNameConfigBuilder() {
	return new GlobalVarConfig( 'eg' ); // nahraďte "např." jakoukoli vlastní předponou
}
$wgConfigRegistry['ext-name'] = 'wfExtNameConfigBuilder';

Pokud používáte registraci rozšíření, můžete místo toho použít pole prefix nebo config_prefix (v závislosti na verzi schématu).

Testování

Při ladění používáte následující k testování, zda přistupujete ke správné instanci Config. Měli byste to udělat místo $wgConfigRegistry zobrazené v sekci pro rozšíření výše.

$wgConfigRegistry['ext-name'] = function() { 
	return new HashConfig( array( 
		// Pole konfiguračních proměnných a hodnot
		'Foo' => 'baz'
	) );
};

Pokud přistupujete k nesprávné instanci Config, bude vytvořen ConfigException.

Pro úpravu konfiguračních proměnných v testech PhpUnit v rozšířeních používajících manifest verze 1 (nebo v jádru MediaWiki) můžete v testovacích případech, které rozšiřují MediaWikiIntegrationTestCase, provést následující:

$this->setMwGlobals( [ 'wgFoo' => 'baz' ] );


Programová úprava konfiguračních hodnot

Jediná implementace Config, která podporuje modification of values, je HashConfig, která se většinou používá v testech.

Jeden způsob, jak upravit hodnoty ze služby MainConfig, je pomocí háčku MediaWikiServices, ale to se nedoporučuje. Místo toho by měl být použit háček, který umožní řízenější a explicitnější úpravu příslušných hodnot.

Aktualizace z dřívější verze MediaWiki 1.23

Verze MediaWiki:
1.23

V MediaWiki 1.23 bylo představeno nové rozhraní Config pro přístup k možnostem konfigurace. To nám umožnilo abstrahovat backendy, ve kterých ukládáme možnosti konfigurace.

Kód starší verze 1.23 by vypadal takto:

class ApiMyModule extends ApiBase {
	public function execute() {
		global $wgFoo;
		if ( $wgFoo ) {
			// vytvoří
		}
	}
}

Kód 1.23+ by měl vypadat takto:

class ApiMyModule extends ApiBase {
	public function execute() {
		$config = $this->getConfig(); // toto je objekt Config
		if ( $config->get( 'Foo' ) ) {
			// vytvoří
		}
	}
}

Zde si všimnete několika změn:

  • Použijeme $this->getConfig() k získání výchozího objektu Config. Většina kontextů implementuje getConfig().
  • Namísto kontroly "wgFoo" se zeptáte objektu Config na "Foo" bez jakékoli předpony wg.

Související odkazy