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 .

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


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__ );

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.


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';
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.