ObjectFactory
ObjectFactory
crée des objets à partir de spécifications (via $objectFactory->createObject()
ou ObjectFactory::getObjectFromSpec()
).
Ce format est utilisé par certains paramètres de configuration (tels que $wgMWLoggerDefaultSpi ou $wgSessionProviders ).
Une spécification typique ressemble à ceci :
$spec = [
'class' => 'Message',
'args' => [ 'unexpected', [ 'foo', 123 ] ],
];
qui est la spécification de new Message( 'unexpected', [ 'foo', 123 ] )
.
Les autres options comprennent :
$spec = [
'factory' => 'Message::newFallbackSequence',
'args' => [ 'unexpected', 'unexpected2' ],
];
// Message::newFallbackSequence( 'unexpected', 'unexpected2' )
$spec = [
'class' => 'Message',
'args' => [ 'foo', 'bar' ],
'calls' => [ 'inLanguage' => [ 'en' ], 'useDatabase' => [ false ] ],
];
// va appeler $message->inLanguage( 'en' ), $message->useDatabase( false ) après avoir créé $message
Avec Dependency Injection
Version de MediaWiki : | ≥ 1.34 |
A partir de MediaWiki 1.34 , ObjectFactory prend en charge la création des classes avec les services référencés dans les spécifications.
Pour utiliser ObjectFactory afin de créer les classes qui ont besoin de services, vous devez utiliser le service ObjectFactory et appeler la méthode createObject
.
Pour les besoins non MediaWiki, une instance ObjectFactory peut être créée avec une interface conteneur PSR-11 qui sera utilisée pour récupérer les services.
$spec = [
'class' => 'MyClass',
'args' => [ 'foo', 'bar' ],
'services' => [ 'Service1', 'Service2' ],
];
// $services = \MediaWiki\MediaWikiServices::getInstance();
// new MyClass( $services->get( 'Service1' ), $services->get( 'Service2' ), 'foo', 'bar' )