Příručka:Konfigurace pro vývojáře
- Pro dokumentaci o konfiguraci MediaWiki viz Manual:Configuration .
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
use MediaWiki\MediaWikiServices; $config = MediaWikiServices::getInstance()->getMainConfig(); // same as: $config = MediaWikiServices::getInstance()->getConfigFactory()->makeConfig( 'main' );
Můžete použít MainConfigNames , například:
$scriptPath = MediaWikiServices::getInstance()->getMainConfig()->get( MainConfigNames::ScriptPath );
Výjimky
Toto by se nemělo používat k načítání objektů globálních proměnných, jako je $wgUser nebo $wgRequest , ani to nelze použít k načítání proměnných, jako je $IP .
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 }
Konvence pojmenování:
- 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ů.
- Je zvykem dělat název pro ConfigRegistry, zde "vaše rozšíření", malými písmeny a bez mezer.
Vlastní předpony
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.
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) function 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).
Přístup k možnostem konfigurace
Přístup k hodnotám konfigurace z rozšíření funguje stejným způsobem jako přístup k těmto hodnotám z jádra MediaWiki:
- Přístup ke konfiguraci. V některých kontextech, například při prodloužení SpecialPage nebo ApiBase , můžete jednoduše zavolat
$this->getConfig(). Opět, pokud nemáte přístup k žádnémuContextSource, můžete zavolat hlavní konfiguraci pomocíMediaWikiServices::getInstance()->getMainConfig(). - Použijte
get()s názvem konfigurace, ale bez předpony.
Například:
use MediaWiki\MediaWikiServices; $config = MediaWikiServices::getInstance()->getMainConfig(); // or if you can: $config = $this->getConfig(); $myConfigOption = $config->get( 'YourExtensionSomeConfigKey' ); // without prefix!
Jako poslední možnost to můžete nazvat jako globální:
global $wgYourExtensionSomeConfigKey;
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
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:
<?php class ApiMyModule extends ApiBase { public function execute() { global $wgFoo; if ( $wgFoo ) { // vytvoří } } }
Kód 1.23+ by měl vypadat takto:
<?php use MediaWiki\Api\ApiBase; 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.