Jump to content
MediaWiki

Příručka:RequestContext.php

From mediawiki.org
This page is a translated version of the page Manual:RequestContext.php and the translation is 100% complete.
Soubor MediaWiki: RequestContext.php
Lokalita: includes/context/ (includes/Context/ in 1.46 or later)
Zdrojový kód: master1.44.21.43.51.39.15
Třídy: MediaWiki\Context\RequestContext
Verze MediaWiki:
≥ 1.18

Třída RequestContext se používá k zapouzdření všech částí, které jsou relevantní pro kontext požadavku. Implementuje rozhraní IContextSource a MutableContext .

Rozšíření by měla volat getContext() a poté get2ドル(), spíše než se spoléhat na globální stavové proměnné.

Přístup k RequestContext

Většina míst, kde potřebujete něco udělat s daty typu RequestContext, by měla poskytovat přístup ke zdroji typu IContextData (?) a měli byste použít ten, ne hlavní instanci typu RequestContext nebo globální proměnné typu $wg.

K hlavnímu kontextu požadavku můžete přistupovat také pomocí RequestContext::getMain();, ale toto by mělo být až poslední možnost.

Při psaní speciální stránky

Při psaní SpecialPage máte přístup ke kontextu prostřednictvím $this->getContext();. SpecialPage also implements a number of helper methods that are the equivalent of methods provided by RequestContext, for which see below.

SpecialPages mají být spustitelné v alternativních kontextech, rozšíření by se měla začít vzdalovat od používání $wg. Kolem verze MW 1.20 můžeme" ukončit podporu pro zahrnutí speciálních stránek pomocí proměnných souvisejících s $wg RequestContext.

Při psaní kódu vzhledu

Přístup ke kontextu máte přes $this->getContext();. Vzhled podobně poskytuje několik pomocných metod, které viz níže.

Při použití háčků

  • Pokud váš háček poskytuje jako argument hodnotu OutputPage , využijte kontext, který poskytuje.
  • Pokud je váš háček spuštěn v kontextu výstupu stránky Skin::outputPage( $out ); a je mu poskytnuta instance Skin, použijte kontext, který poskytuje.
  • Pokud váš háček poskytuje instanci Title , použijte ji jako preferenci před jiným kontextem.
  • Totéž platí pro jakékoli instance typu WebRequest poskytnuté jako argumenty pro háčky.
  • Ujistěte se, že používáte správný háček. Pokud není poskytnut správný kontext, můžete ho používat k nesprávnému účelu a narazit na nesouvisející chyby.
  • Některé háčky však mohou být zastaralé a je třeba jim v argumentech poskytnout správný kontext.

Při psaní parserových funkcí a háčků

  • Funkce a háčky parseru by neměly přistupovat k datům kontextu požadavku. K dalším kontextovým informacím lze přistupovat z objektu lokálního parseru.
    Například: $parser->getOutput()->addModules( 'ext.my.module' );
  • Pro cokoli, co potřebujete, jako například uživatelský jazyk, použijte ParserOptions.
  • Použijte třídu Linker:: staticky namísto přístupu k třídě Skin.
  • Pokud potřebujete do výstupu stránky přidat něco mimo oblast obsahu, ParserOutput by měl mít metody, které vám umožní dělat to, co chcete.
    • Pokud metody v ParserOutput nejsou dostatečně flexibilní pro to, co potřebujete udělat, je možné zaregistrovat zpětné volání s ParserOutput, které bude voláno později na místě, kde můžete volně využít RequestContext.


Vytvoření nového RequestContext

Stále existuje kód používající globální proměnné $wgOut , $wgTitle , $wgUser . Dokud tyto nebudou odstraněny, nemůžeme očekávat, že vlastní kontexty budou fungovat perfektně a budeme muset zachovat stejná řešení. Pokud však opravíme kód tak, aby tyto globální proměnné přestal používat, mělo by být možné něco jako toto:

$context = new RequestContext();
$context->setRequest( new FauxRequest( [...] ) );
$context->setTitle( Title::newFromText( [...] ) );
$context->setUser( User::newFromName( 'Dantman' ) );
$context->setSkin( new OfflineDummySkin() );
// [...]
$html = $context->getOutput()->capture();

Veřejné metody

Přístupové objekty

Proměnná RequestContext nebo IContextSource poskytuje následující metody přístupu:

  • $context->getRequest() – instance WebRequest , ze které se mají načíst proměnné požadavku.
  • $context->getTitle() – instance třídy Title pro vypisovanou stránku.
  • $context->getOutput() – instance OutputPage vázaná na RequestContext pro odesílání výstupu stránky.
  • $context->getSkin() – instance třídy Skin používaná k vykreslení stránky.
  • $context->getUser() – instance třídy User pro uživatele, pro kterého je stránka vykreslena.
  • $context->getLanguage() – (přidáno ve verzi 1.19 jako náhrada nyní zastaralého $context->getLang()) instance Language uživatelského jazyka, ve kterém je stránka vykreslena.
  • $context->getWikiPage() (zavedeno od 1.19) – instance WikiPage , která je vypsána (viz níže).
  • $context->canUseWikiPage() (zavedeno od 1.19) – zkontroluje, zda lze volat getWikiPage(), nebo vyvolá výjimku.
  • $context->msg() – vrací objekt Message s kontextem nastaveným na volaný kontext. Má stejné parametry jako wfMessage() .
  • $context->getConfig() (zavedeno od 1.23) – hlavní objekt Config

Výstup a jazyk jsou pouze pro čtení, zbytek RequestContext lze nastavit pomocí metod, jako je například $context->setTitle( Title::newMainPage() )).

Při psaní SpecialPage

SpecialPage také implementuje řadu pomocných prvků:

  • $this->getRequest()
  • $this->getOutput()
  • $this->getUser()
  • $this->getAuthority()
  • $this->getSkin()
  • $this->getLanguage()
  • $this->getConfig()
  • $this->getFullTitle() – pro název speciální stránky můžete použít hodnotu $this->getPageTitle(); a pro název speciální stránky $this->getFullTitle(); a libovolná data $par.


Při psaní kódu vzhledu

Stejně jako SpecialPage, i Skin implementuje řadu pomocných funkcí:

  • $this->getUser()
  • $this->getTitle()

Kontext vzhledu je zadán příkazem Skin::outputPage( $out );, který je volán příkazem OutputPage::output();. Externímu přístupu ke kontextově citlivým voláním metod je třeba se vyhnout.

Alternativní třídy ke zvážení

Základem rozhraní RequestContext je rozhraní IContextSource. Definuje API něčeho, ze kterého můžete získat části kontextu požadavku.

Pokud píšete API, které používá v argumentech nápovědy k typům nebo provádí kontroly instanceof, měli byste použít IContextSource, ne RequestContext.

ContextSource je abstraktní pomocná třída, která stejně jako RequestContext implementuje IContextSource. Tím, že vaši novou třídu rozšíří na ContextSource, bude mít vaše třída k dispozici různé pomocné metody (getOutput(), getSkin(), getLanguage() atd.) a bude implementovat IContextSource.

Stejně jako ContextSource lze i DerivativeContext použít k dědění kontextu z jiného zdroje, ale také umožňuje lokální změnu jednotlivých částí kontextu, například instance Title.

Poznámky pod čarou

AltStyle によって変換されたページ (->オリジナル) /