Как использовать ComponentRegistrar :: LIBRARY в Magento 2


15

У нас есть 4 типа компонентов в Magento 2, так как я использовал три из них, но мой вопрос заключается в том, как использовать const LIBRARY = 'library';компонент.

Как следует из названия, это то, что включает сторонние библиотеки, но любой может дать мне пример того, как включить библиотеку и использовать библиотеку на глобальном уровне приложений.

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

Я не нашел никакой информации о const LIBRARY = 'library';в официальной документации Magento 2 Зарегистрируйте свой компонент .

Ответы:


2

Я не уверен, почему это не задокументировано в официальной документации, но вот как это следует сделать из того, что я понимаю:

Так что это очень похоже на то, как ваши модули регистрации, вам просто нужно создать lib/internal/Your/Library/registration.phpсо следующим содержанием:

<?php

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

Также вы можете найти правильное местоположение, которое должным образом задокументировано здесь: http://devdocs.magento.com/guides/v2.0/architecture/archi_perspectives/components/modules/mod_conventions.html

Для использования / загрузки этих библиотек вы следуете тем же путем, что и с Magento\Frameworkбиблиотекой. Итак, используя:

use Your\Library\Custom\Class;

Вы можете найти ядро registration.phpв lib/internal/Magento/Frameworkпапке


Спасибо @Raphael, Можете ли вы дать мне пример того, как использовать / загрузить эти библиотеки, добавленные "LIBRARY = 'library" в сторонних / пользовательских реализациях.
Кришна Иджада

Я с нетерпением жду, чтобы иметь базовый пример того, как использовать это в режиме реального времени.
Кришна Иджада

@ Krishati95Dev см. Мой обновленный ответ
Рафаэль на Digital

1

Вы можете ссылаться из основного файла, где он был использован. Вот пример, который может вам помочь, вам нужно дать имя, которое вы хотите включить: -

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

Пример :

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

0

Я мог бы получить ответ /magento//a/163418/36759, чтобы работать, но только после объявления пространств имен внутри классов в библиотеке, так что имейте это в виду.


0

Начиная с Magento 2.2 описанный полу-документированный библиотечный подход больше не работает. Magento рекомендует разработчикам добавлять библиотеки с использованием composer в соответствии с:

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

Что бы работало, добавив свой собственный автозагрузчик: 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;
  }
});

Это работает, благодаря app/etc/NonComposerComponentRegistration.phpчему все еще включает в себя следующие каталоги:

$pathList[] = dirname(dirname(__DIR__)) . '/lib/internal/*/*/registration.php';
$pathList[] = dirname(dirname(__DIR__)) . '/lib/internal/*/*/*/registration.php';
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.