Manual:RequestContext.php/es
Archivo de MediaWiki: RequestContext.php | |
---|---|
Ubicación: | includes/context/ |
Código fuente: | master • 1.43.1 • 1.42.6 • 1.39.12 |
Clases: | MediaWiki\Context\RequestContext |
Versión de MediaWiki: | ≥ 1.18 |
La clase RequestContext sirve para encapsular todas las piezas relevantes para el contexto de una solicitud. Implementa las interfaces IContextSource y MutableContext .
Se recomienda que las extensiones llamen a getContext()
y luego a getSomeObject()
en lugar de depender de variables globales de estado.
Acceder a un RequestContext
La mayoría de los sitios donde tienes que hacer algo con datos de RequestContext deben proporcionar acceso a una fuente IContextData (¿?) y deberías utilizar eso y no la instancia principal RequestContext o los globales $wg
.
También puedes acceder al contexto principal de la solicitud mediante RequestContext::getMain();
, pero este debería ser un último recurso.
Al escribir una página especial (SpecialPage)
Al escribir una SpecialPage , tienes acceso al contexto mediante $this->getContext();
SpecialPage
also implements a number of helper methods that are the equivalent of methods provided by RequestContext, for which see below.
Las páginas especiales están concebidas para ser ejecutables en otros contextos, por lo que las extensiones deben empezar a alejarse del uso de $wg
.
Puede que en torno a MW 1.20 abandonamos el soporte de páginas especiales incluibles con variables relacionadas con $wg RequestContext
Al escribir código para las apariencias
Tienes acceso al contexto mediante $this->getContext();
.
Skin igualmente proporciona algunos métodos de ayuda que puedes consultar a continuación.
Al utilizar ganchos
- Si tu gancho proporciona un objeto OutputPage como argumento, utiliza el contexto proporcionado por el mismo.
- Si tu gancho se ejecuta en el contexto de salida de la página
Skin::outputPage( $out );
y se le proporciona una instancia de Skin, haz uso del contexto proporcionado por la misma. - Si tu gancho proporciona una instancia de Title , utilízala de forma preferente respecto a otros contextos.
- Lo mismo se aplica a cualquier instancia de WebRequest proporcionada como argumento a un gancho.
- Asegúrate de utilizar el gancho correcto; si no se proporciona el contexto adecuado, puedes estar utilizando un gancho para un propósito equivocado, lo que puede generar errores incoherentes.
- Sin embargo, algunos ganchos pueden estar desactualizados y necesitan que se les proporcione un contexto adecuado dentro de sus argumentos.
Al escribir funciones del analizador sintáctico y ganchos
- Las funciones del analizador y los ganchos no deberían acceder a los datos de contexto de la solicitud Se puede acceder a otra información contextual desde el objeto local del analizador sintáctico.
Por ejemplo:$parser->getOutput()->addModules( 'ext.my.module' );
- Haz uso de las ParserOptions para cualquier cosa que necesites como el idioma del usuario.
- Utiliza la clase Linker:: de forma estática en lugar de acceder al objeto Skin.
- Si tienes que añadir algo a la salida de la página fuera del área de contenido, el ParserOutput debería tener métodos que te permitan hacer lo que quieras.
- Si los métodos de ParserOutput no son lo bastante flexibles para lo que necesitas hacer, se puede registrar una retrollamada con el ParserOutput a la que se llamará después en un entorno en el que puedas utilizar libremente
RequestContext
.
- Si los métodos de ParserOutput no son lo bastante flexibles para lo que necesitas hacer, se puede registrar una retrollamada con el ParserOutput a la que se llamará después en un entorno en el que puedas utilizar libremente
Crear un nuevo RequestContext
Sigue habiendo código que utiliza las variables globales $wgOut
, $wgTitle
, $wgUser
.
Mientras no se hayan eliminado, no podemos esperar que los contextos personalizados funcionen perfectmente y tendremos que mantener las mismas soluciones alternativas; sin embargo, si arreglamos el código para dejar de utilizar estas variables globales, entonces algo como esto debería ser posible:
$context = new RequestContext();
$context->setRequest( new FauxRequest( [...] ) );
$context->setTitle( Title::newFromText( [...] ) );
$context->setUser( User::newFromName( 'Dantman' ) );
$context->setSkin( new OfflineDummySkin() );
// [...]
$html = $context->getOutput()->capture();
Métodos públicos
Accesores
Un RequestContext o un IContextSource proporciona los siguientes métodos accesores:
$context->getRequest()
- instancia de WebRequest de la que obtener variables de la solicitud.$context->getTitle()
- instancia de Title para la página que se está sacando.$context->getOutput()
- instancia de OutputPage ligada al RequestContext a la que enviar la salida de la página.$context->getSkin()
- instancia de la clase Skin utilizada para generar la página.$context->getUser()
- instancia de User del usuario para quien se está generando la página.$context->getLanguage()
- (añadido en 1.19 para reemplazar el ahora obsoleto$context->getLang()
) instancia de Language del idioma de usuario en el que se está generando la página.$context->getWikiPage()
(introducido en 1.19) - instancia de WikiPage que se está sacando (pero véase a continuación).$context->canUseWikiPage()
(introducido en 1.19) - comprueba si se puede llamar agetWikiPage()
; si no, arrojará una excepción.$context->msg()
- devuelve un objeto Message cuyo contexto está inicializado al contexto al que se llama. Tiene los mismos parámetros que wfMessage() .$context->getConfig()
(introducido en 1.23) - el objeto Config principal
La salida y el idoma son de solo lectura; el resto del RequestContext se puede inicializar mediante métodos tales como $context->setTitle( Title::newMainPage() )
).
Al escribir una página especial
SpecialPage también implementa una serie de ayudantes:
$this->getRequest()
$this->getOutput()
$this->getUser()
$this->getAuthority()
$this->getSkin()
$this->getLanguage()
$this->getConfig()
$this->getFullTitle()
Puedes utilizar$this->getPageTitle();
para el título de la página especial y$this->getFullTitle();
para el título de la página especial y cualquier dato $par.
Al escribir código para una apariencia
Al igual que SpecialPage
, Skin
también implementa una serie de ayudantes:
$this->getUser()
$this->getTitle()
El contexto de la apariencia se introduce mediante Skin::outputPage( $out );
, que a su vez recibe la llamada de OutputPage::output();
. Debe evitarse el acceso externo a llamadas de métodos sensibles al contexto.
Clases alternativas que considerar
IContextSource
La base de un RequestContext
es la interfaz IContextSource
.
Define la API de algo de lo que puedes obtener fragmentos de contexto de una solicitud.
Si estás escribiendo una API que utilice determinación de tipos en los argumentos o haga comprobaciones instanceof
, deberías utilizar IContextSource
, no RequestContext
.
ContextSource
ContextSource
es una clase abstracta de ayuda que, al igual que RequestContext
, implementa IContextSource
.
Al hacer que tu nueva clase extienda ContextSource
, contará con los diversos métodos de ayuda (getOutput()
, getSkin()
, getLanguage()
, etc.) e implementará IContextSource
.
DerivativeContext
Al igual que ContextSource, se puede utilizar DerivativeContext para heredar el contexto de otra fuente, pero también permite que se cambien localmente los fragmentos individuales del contexto, como por ejemplo una instancia de Title.