Como usar o ComponentRegistrar :: LIBRARY no Magento 2


15

Temos 4 tipos de componentes no Magento 2, pois tenho usado três deles, mas minha pergunta é como usar o const LIBRARY = 'library';componente.

Como o nome indica, isso pode incluir bibliotecas de terceiros, mas qualquer um pode me dar um exemplo de como incluir uma biblioteca e usar a lib no nível global de aplicativos.

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

Não encontrei nenhuma informação const LIBRARY = 'library';na documentação oficial do Magento 2 Registre seu componente .

Respostas:


2

Não sei por que não está documentado na documentação oficial, mas eis como deve ser feito pelo que entendi:

Portanto, é muito semelhante à maneira como seus módulos de registro, você só precisa criar lib/internal/Your/Library/registration.phpcom o seguinte conteúdo:

<?php

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

Além disso, você pode encontrar a localização correta documentada corretamente aqui: http://devdocs.magento.com/guides/v2.0/architecture/archi_perspectives/components/modules/mod_conventions.html

Para usar / carregar essas bibliotecas, siga o mesmo caminho que é feito com a Magento\Frameworkbiblioteca. Então, usando:

use Your\Library\Custom\Class;

Você pode encontrar o núcleo registration.phpna lib/internal/Magento/Frameworkpasta


Obrigado @Raphael, pode me dar um exemplo de como usar / carregar essas bibliotecas adicionadas "LIBRARY = 'library" em implementações de terceiros / personalizadas.
precisa saber é o seguinte

Estou ansioso para ter um exemplo básico de como usar isso em tempo real.
precisa saber é o seguinte

@ Krishati95Dev ver minha resposta atualizada
Raphael no Digital Pianism

1

Você pode consultar os arquivos principais em que foi usado. Aqui está o exemplo em que isso pode ajudá-lo. Você precisa fornecer o nome que deseja incluir: -

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

Exemplo:

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

0

Eu poderia obter a resposta /magento//a/163418/36759 para funcionar, mas somente depois de declarar namespaces nas classes da biblioteca, lembre-se disso.


0

No Magento 2.2, a abordagem de biblioteca semi-documentada descrita não funciona mais. O Magento incentiva os desenvolvedores a adicionar bibliotecas usando o compositor de acordo com:

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

O que funciona seria adicionar seu próprio carregador automático: 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;
  }
});

Isso funciona devido ao app/etc/NonComposerComponentRegistration.phpqual ainda inclui os seguintes diretórios:

$pathList[] = dirname(dirname(__DIR__)) . '/lib/internal/*/*/registration.php';
$pathList[] = dirname(dirname(__DIR__)) . '/lib/internal/*/*/*/registration.php';
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.