Comment utiliser ComponentRegistrar :: LIBRARY dans Magento 2

15

Nous avons 4 types de composants dans Magento 2, car j'en ai utilisé trois, mais ma question est de savoir comment utiliser les const LIBRARY = 'library';composants.

Comme son nom l'indique, c'est quelque chose à inclure des bibliothèques tierces, mais n'importe qui peut me donner un exemple sur la façon d'inclure une bibliothèque et d'utiliser la bibliothèque au niveau de l'application globale.

/**#@+
* Different types of components
*/
const MODULE = 'module';
const LIBRARY = 'library';
const THEME = 'theme';
const LANGUAGE = 'language';

Je n'ai trouvé aucune information sur const LIBRARY = 'library';dans la documentation officielle de Magento 2 Enregistrez votre composant .

Krishna ijjada
la source

Réponses:

2

Je ne sais pas pourquoi ce n'est pas documenté sur la documentation officielle, mais voici comment cela devrait être fait d'après ce que je comprends:

C'est donc très similaire à la façon dont vos modules d'enregistrement, il vous suffit de créer lib/internal/Your/Library/registration.phpavec le contenu suivant:

<?php

\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::LIBRARY,
    'your/library',
    __DIR__
);

Vous pouvez également trouver que le bon emplacement est correctement documenté ici: http://devdocs.magento.com/guides/v2.0/architecture/archi_perspectives/components/modules/mod_conventions.html

Pour utiliser / charger ces bibliothèques, vous suivez la même procédure que pour la Magento\Frameworkbibliothèque. Donc, en utilisant:

use Your\Library\Custom\Class;

Vous pouvez trouver le noyau registration.phpsous le lib/internal/Magento/Frameworkdossier

Raphael chez Digital Pianism
la source
Merci @Raphael, pouvez-vous me donner un exemple sur la façon d'utiliser / charger ces bibliothèques ajoutées "LIBRARY = 'library" dans des implémentations tierces / personnalisées.
Krishna ijjada
J'ai hâte d'avoir un exemple de base sur la façon de l'utiliser en temps réel.
Krishna ijjada
@ Krishati95Dev voir ma réponse mise à jour
Raphael au Digital Pianism
1

Vous pouvez vous référer à partir du fichier de base où il a été utilisé. Voici l'exemple cela peut vous aider, vous devez donner le nom que vous souhaitez inclure: -

ComponentRegistrar :: register (ComponentRegistrar :: LIBRARY, '', DIR );

Exemple :

\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::LIBRARY,
    'magento/test',
    __DIR__ );
Shashank Gupta
la source
0

J'ai pu obtenir la réponse /magento//a/163418/36759 pour travailler, mais seulement après avoir déclaré des espaces de noms à l'intérieur des classes de la bibliothèque, alors gardez cela à l'esprit.

bh-
la source
0

Depuis Magento 2.2, l'approche de bibliothèque à demi documentée décrite ne fonctionne plus. Magento encourage les développeurs à ajouter des bibliothèques à l'aide de composer selon:

https://github.com/magento/magento2/issues/10985

Ce qui fonctionne serait d'ajouter votre propre chargeur automatique: lib/internal/Your/Library/registration.php

<?php
namespace Your\Library;

spl_autoload_register(function ($class) {
  $prefix   = __NAMESPACE__ . '\\';
  $base_dir = __DIR__.'/';
  $len = strlen($prefix);

  if (strncmp($prefix, $class, $len) !== 0) {
    return;
  }
  $relative_class = substr($class, $len);
  $file = $base_dir . str_replace('\\', '/', $relative_class) . '.php';
  if (file_exists($file)) {
    require $file;
  }
});

Cela fonctionne grâce à app/etc/NonComposerComponentRegistration.phpqui comprend toujours les répertoires suivants:

$pathList[] = dirname(dirname(__DIR__)) . '/lib/internal/*/*/registration.php';
$pathList[] = dirname(dirname(__DIR__)) . '/lib/internal/*/*/*/registration.php';
Dominik chez NETZKOLLEKTIV
la source