Verwendung von ComponentRegistrar :: LIBRARY in Magento 2

15

Wir haben 4 Arten von Komponenten in Magento 2, da ich drei von ihnen verwendet habe, aber meine Frage ist, wie man const LIBRARY = 'library';Komponenten verwendet.

Wie der Name schon sagt, können hier Bibliotheken von Drittanbietern eingeschlossen werden, aber jeder kann mir ein Beispiel geben, wie man eine Bibliothek einschließt und die Bibliothek auf globaler Anwendungsebene verwendet.

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

Ich habe keine Informationen const LIBRARY = 'library';in der offiziellen Magento 2-Dokumentation gefunden. Registrieren Sie Ihre Komponente .

Krishna ijjada
quelle

Antworten:

2

Ich bin nicht sicher, warum es nicht in der offiziellen Dokumentation dokumentiert ist, aber hier ist, wie es gemacht werden sollte, aus was ich verstehe:

Es ist also sehr ähnlich wie bei Ihren Registermodulen. Sie müssen nur lib/internal/Your/Library/registration.phpden folgenden Inhalt erstellen :

<?php

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

Außerdem können Sie hier den richtigen Speicherort finden, der ordnungsgemäß dokumentiert ist: http://devdocs.magento.com/guides/v2.0/architecture/archi_perspectives/components/modules/mod_conventions.html

Um diese Bibliotheken zu benutzen / zu laden, gehen Sie genauso vor wie bei der Magento\FrameworkBibliothek. Also mit:

use Your\Library\Custom\Class;

Sie finden den Kern registration.phpunter lib/internal/Magento/FrameworkOrdner

Raphael beim digitalen Pianismus
quelle
Danke @Raphael, können Sie mir bitte ein Beispiel geben, wie diese Bibliotheken verwendet / geladen werden können?
Krishna ijjada
Ich freue mich darauf, ein grundlegendes Beispiel zu haben, wie dies in Echtzeit verwendet werden kann.
Krishna ijjada
@ Krishati95Dev siehe meine aktualisierte Antwort
Raphael bei Digital Pianism
1

Sie können von der Core-Datei verweisen, wo sie verwendet wurde. Hier ist das Beispiel, das Ihnen helfen kann. Sie müssen den Namen angeben, den Sie einschließen möchten:

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

Beispiel:

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

Ich könnte die Antwort /magento//a/163418/36759 zum Laufen bringen, aber nur, nachdem ich Namespaces in den Klassen in der Bibliothek deklariert habe. Denken Sie daran.

bh-
quelle
0

Ab Magento 2.2 funktioniert der beschriebene Ansatz der halbdokumentierten Bibliothek nicht mehr. Magento empfiehlt Entwicklern, Bibliotheken mit Composer hinzuzufügen, und zwar gemäß den folgenden Kriterien:

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

Was funktioniert, wäre das Hinzufügen eines eigenen Autoloaders: 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;
  }
});

Dies funktioniert aufgrund app/etc/NonComposerComponentRegistration.phpdessen noch die folgenden Verzeichnisse enthält:

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