Magento 2에서 ComponentRegistrar :: LIBRARY를 사용하는 방법


15

Magento 2에는 4 가지 유형의 구성 요소가 있는데 그 중 3 가지를 사용하고 있지만 내 질문은 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 설명서 에 대한 정보를 찾지 못했습니다 . 구성 요소를 등록하십시오 .

답변:


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"가 추가 된 라이브러리를 사용 /로드하는 방법에 대한 예를 들어 주시겠습니까?
Krishna ijjada

이것을 실시간으로 사용하는 방법에 대한 기본 예제를 기대하고 있습니다.
Krishna ijjada

@ Krishati95Dev 내 업데이트 된 답변보기
Digital Pianism의 Raphael

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.