Magento 2でComponentRegistrar :: LIBRARYを使用する方法


15

Magento 2には4つのタイプのコンポーネントがありますが、そのうち3つを使用していますが、私の質問は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私の更新された答えを見る
デジタルピアニズムのラファエル

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';
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.