如何在Magento 2中使用ComponentRegistrar :: LIBRARY


15

在Magento 2中,我们有4种类型的组件,因为我一直在使用其中的三种,但是我的问题是如何使用const LIBRARY = 'library';组件。

顾名思义,这是包含第三方库的内容,但是任何人都可以给我一个有关如何包含库并在全局应用程序级别使用lib的示例。

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

const LIBRARY = 'library';在Magento 2官方文档中找不到任何信息。注册您的组件

Answers:


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.phplib/internal/Magento/Framework文件夹下找到核心


感谢@Raphael,能否请给我一个示例,说明如何使用/加载在第三方/自定义实现中添加了“ LIBRARY ='library”的库。
克里希纳·贾贾达

期待有一个有关如何实时使用此基本示例的信息。
克里希纳·贾贾达

@ Krishati95Dev看到我的最新答案
拉斐尔(Raphael)在Digital Pianism上

1

您可以从使用核心文件的地方引用。以下是可以帮助您的示例,您需要提供要包括的名称:-

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

范例:

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


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';
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.