ObjectManager peut être appelé l'un des principaux concepts qui sous-tendent la construction de Magento2, et est complètement nouveau par rapport à Magento1. Si nous rappelons Magento1, alors là, pour créer les objets dont nous avons besoin pour travailler, nous avons utilisé la classe Mage, qui fournissait des méthodes statiques pour créer différents types d'objets - que ce soit des modèles, des modèles de ressources, des helpers, ou pour créer des objets que nous voulions avoir en une seule instance (méthode Mage :: getSingleton). Lors de la création de Magento2, l'équipe de développement a abandonné cette idée et implémenté le principe de l'injection de dépendances et des contrats de service (ServiceContracts). C'est ce qui a rendu Magento2 si flexible, facilement personnalisable et testable. Aussi, la présence de la fonctionnalité construite autour de l'ObjectManager permet d'avoir toutes les fonctionnalités de personnalisation du comportement du système,que nous pouvons personnaliser via le fichier de configuration di.xml.
Si vous regardez globalement la fonctionnalité implémentée par ObjectManager, alors nous pouvons dire qu'il s'agit d'une sorte d'implémentation du conteneur DI, qui est représenté dans le monde PHP sous le nom de PSR-11, bien que l'ObjectManager lui-même n'implémente pas directement Psr \ Container \ ContainerInterface (et n'ait pas de has , ce que Psr \ Container \ ContainerInterface suppose). Il s'agit d'une fonction centralisée de création et de récupération d'objets. Disposer d'une telle classe centralisée pour générer les objets requis présente les avantages suivants.
- Nous n'avons pas besoin d'initialiser et de gérer manuellement les objets (nous devons également dire que l'ObjectManager est utilisé pour générer des objets à l'intérieur des classes Factory et Proxy, qui sont créées par la génération de code)
- il est possible grâce aux paramètres de prescrire quelle implémentation de certaines interfaces la classe doit recevoir et d'utiliser le principe d'inversion de dépendance
- le système devient plus facile à tester
- il est possible d'utiliser des classes Proxy et des classes d'usine (Factory)
- Sauvegarde des ressources du serveur, car certains objets ne sont pas réinitialisés, mais sont extraits du cache objets déjà créés (paramètre partagé)
, , Magento\Framework\ObjectManager\ObjectManager protected $_sharedInstances = []. , 1 () — , (namespace). ObjectManager ?
, ObjectManager - shared=true. — shared xml-. (observer).
<observer name="legacy_model_save"
instance="Magento\Framework\EntityManager\Observer\BeforeEntitySave" shared="false"/>
. , type. , true -, .
ObjectManager . , Http.
index.php, , Magento\Framework\App\Bootstrap
create, 2 :
- — $_SERVER +
create createObjectManagerFactory, Magento\Framework\App\ObjectManagerFactory Bootstrap, , Magento\Framework\App\ObjectManager. , . Magento\Framework\App\Http::launch ObjectManager Magento\Framework\App\ObjectManager::configure. di.xml. ObjectManager preference, type, virtualType. ObjectManager — Magento\Framework\ObjectManager\Config\Config, Magento\Framework\ObjectManager\ConfigInterface. di.xml : preference, type, virtualType . preference’ ObjectManager’ .
2 ObjectManager: create get. , create ( , Factory method), get , , .
— (, Magento\Framework\ObjectManager\FactoryInterface), , Magento\Framework\ObjectManager\Factory. php . Magento\Framework\ObjectManager\Factory\AbstractFactory::createObject, . ObjectManager , , .
Magento\Framework\ObjectManager\Code\Generator. , , , Factory Proxy , (Proxy di.xml) . Proxy-, , , proxy-, , ( Proxy). , . Factory factory method, create, ObjectManager Magento\Framework\App\ObjectManager::create.