This method is dependent on, and inherently must depend on, all of
Title, WikiPage, and WebRequest. And, like Title and WikiPage,
which also have getters in RequestContext, Action is also derived
from a query parameter that is widely recognised in almost all
web requests to index.php.
The status quo in core and extensions, is to obtain this value
via Action::getActionName(), which as a static method that bypasses
dependency injection and also has the problem of not being cached.
Caching it within ActionFactory seems hard and awkward, due to
varying by context.
In change I61d66211bd (22f9a32853) a cached wrapper method was added
internally to the Skin class. In change I8cbc4bba4d248d9 (235820d631)
another cached wrapper was added in the Gadgets extension.
This change takes this approach further by making it a stable public
method on RequestContext.
To facilitate testing and to offer basic confidence in this working
correctly, this commit also adopts the new method in two place that
are considered "safe" (Skin, and OutputPage). Both of these are
called relatively late in the PHP proccess and well after any Setup
code and overrides (such as in MediaWiki.php), during which it is
more complex to call this. I'll audit and update those in a subsequent
change.
Change-Id: I1e259b54dca48a32be5a8c6cbb8eb69aec2da115
82 lines
1.8 KiB
PHP
82 lines
1.8 KiB
PHP
<?php
|
|
/**
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
* http://www.gnu.org/copyleft/gpl.html
|
|
*
|
|
* @file
|
|
*/
|
|
|
|
use MediaWiki\Permissions\Authority;
|
|
|
|
/**
|
|
* Request-dependent objects containers.
|
|
*
|
|
* @since 1.26
|
|
*/
|
|
interface MutableContext {
|
|
|
|
/**
|
|
* @param Config $config
|
|
*/
|
|
public function setConfig( Config $config );
|
|
|
|
/**
|
|
* @param WebRequest $request
|
|
*/
|
|
public function setRequest( WebRequest $request );
|
|
|
|
/**
|
|
* @param Title $title
|
|
*/
|
|
public function setTitle( Title $title );
|
|
|
|
/**
|
|
* @param WikiPage $wikiPage
|
|
*/
|
|
public function setWikiPage( WikiPage $wikiPage );
|
|
|
|
/**
|
|
* @since 1.38
|
|
* @param string $action
|
|
*/
|
|
public function setActionName( string $action ): void;
|
|
|
|
/**
|
|
* @param OutputPage $output
|
|
*/
|
|
public function setOutput( OutputPage $output );
|
|
|
|
/**
|
|
* @param User $user
|
|
*/
|
|
public function setUser( User $user );
|
|
|
|
/**
|
|
* @unstable
|
|
* @param Authority $authority
|
|
*/
|
|
public function setAuthority( Authority $authority );
|
|
|
|
/**
|
|
* @param Language|string $language Language instance or language code
|
|
*/
|
|
public function setLanguage( $language );
|
|
|
|
/**
|
|
* @param Skin $skin
|
|
*/
|
|
public function setSkin( Skin $skin );
|
|
|
|
}
|