Příručka:Konfigurace pro vývojáře
- Pro dokumentaci o konfiguraci MediaWiki viz [[Manual:Configuration |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 objektuConfig
. Většina kontextů implementujegetConfig()
. - Namísto kontroly "wgFoo" se zeptáte objektu Config na "Foo" bez jakékoli předpony wg.