ObjectFactory/nl
ObjectFactory
maakt objecten aan uit specificatie (via $objectFactory->createObject()
of ObjectFactory::getObjectFromSpec()
).
Dit formaat wordt gebruikt door bepaalde configuratie-instellingen (zoals $wgMWLoggerDefaultSpi en $wgSessionProviders ).
Een specificatie ziet er ongeveer zo uit:
$spec = [
'class' => 'Message',
'args' => [ 'unexpected', [ 'foo', 123 ] ],
];
wat de specificatie is voor new Message( 'unexpected', [ 'foo', 123 ] )
.
Andere opties bevatten:
$spec = [
'factory' => 'Message::newFallbackSequence',
'args' => [ 'unexpected', 'unexpected2' ],
];
// Message::newFallbackSequence( 'unexpected', 'unexpected2' )
$spec = [
'class' => 'Message',
'args' => [ 'foo', 'bar' ],
'calls' => [ 'inLanguage' => [ 'en' ], 'useDatabase' => [ false ] ],
];
// roept $message->inLanguage( 'en' ), $message->useDatabase( false ) aan, na het aanmaken van $message
MediaWiki-versie: | ≥ 1.34 |
Vanaf MediaWiki 1.34 ondersteunt ObjectFactory nu ook het aanmaken van classes met services die in de specificatie gespecificeerd zijn.
Om ObjectFactory te gebruiken om classes aan te maken die services nodig hebben, dient u de ObjectFactory service te gebruiken en dan de methode createObject
aan te roepen.
Voor gebruik buiten MediaWiki kan er een instantie van ObjectFactory worden aangemaakt met een PSR-11 Container interface die gebruikt zal worden om de services op te halen.
$spec = [
'class' => 'MyClass',
'args' => [ 'foo', 'bar' ],
'services' => [ 'Service1', 'Service2' ],
];
// $services = \MediaWiki\MediaWikiServices::getInstance();
// new MyClass( $services->get( 'Service1' ), $services->get( 'Service2' ), 'foo', 'bar' )