Jak korzystać z ComponentRegistrar :: LIBRARY w Magento 2

15

W Magento 2 mamy 4 rodzaje komponentów, ponieważ używałem trzech z nich, ale moje pytanie brzmi: jak używać const LIBRARY = 'library';komponentu.

Jak sama nazwa wskazuje, jest to coś, co można uwzględnić w bibliotekach stron trzecich, ale każdy może dać mi przykład, jak dołączyć bibliotekę i używać biblioteki lib na poziomie aplikacji globalnej.

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

Nie znalazłem żadnych informacji const LIBRARY = 'library';w oficjalnej dokumentacji Magento 2 Zarejestruj swój komponent .

Krishna ijjada
źródło

Odpowiedzi:

2

Nie jestem pewien, dlaczego nie jest to udokumentowane w oficjalnej dokumentacji, ale oto, jak należy to zrobić z tego, co rozumiem:

Jest to więc bardzo podobne do sposobu, w jaki moduły rejestrujące wystarczy utworzyć lib/internal/Your/Library/registration.phpz następującą zawartością:

<?php

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

Można również znaleźć właściwą lokalizację, która jest odpowiednio udokumentowana tutaj: http://devdocs.magento.com/guides/v2.0/architecture/archi_perspectives/components/modules/mod_conventions.html

Aby użyć / załadować te biblioteki, postępuj tak samo, jak w przypadku Magento\Frameworkbiblioteki. Więc używając:

use Your\Library\Custom\Class;

Możesz znaleźć rdzeń registration.phpw lib/internal/Magento/Frameworkfolderze

Raphael at Digital Pianism
źródło
Dzięki @Raphael, Czy mogę podać przykład użycia / ładowania tych bibliotek dodanych „LIBRARY = 'biblioteka” w implementacjach innych firm / niestandardowych.
Krishna ijjada
Nie mogę się doczekać, aby mieć podstawowy przykład, jak korzystać z tego w czasie rzeczywistym.
Krishna ijjada
@ Krishati95Dev zobacz moją zaktualizowaną odpowiedź
Raphael z Digital Pianism
1

Możesz odwoływać się z podstawowych plików, w których został użyty. Oto przykład, który może ci to pomóc: Musisz podać nazwę, którą chcesz dołączyć: -

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

Przykład:

\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::LIBRARY,
    'magento/test',
    __DIR__ );
Shashank Gupta
źródło
0

Mogę uzyskać odpowiedź /magento//a/163418/36759 do pracy, ale dopiero po zadeklarowaniu przestrzeni nazw wewnątrz klas w bibliotece, więc miej to na uwadze.

bh-
źródło
0

Od Magento 2.2 opisane częściowo udokumentowane podejście do biblioteki już nie działa. Magento zachęca programistów do dodawania bibliotek za pomocą kompozytora zgodnie z:

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

Jak działa dodanie własnego autoloadera: 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;
  }
});

Działa to, dzięki app/etc/NonComposerComponentRegistration.phpczemu nadal obejmuje następujące katalogi:

$pathList[] = dirname(dirname(__DIR__)) . '/lib/internal/*/*/registration.php';
$pathList[] = dirname(dirname(__DIR__)) . '/lib/internal/*/*/*/registration.php';
Dominik w NETZKOLLEKTIV
źródło