Cómo utilizar ComponentRegistrar :: BIBLIOTECA en Magento 2

15

Tenemos 4 tipos de componentes en Magento 2, ya que he estado usando tres de ellos, pero mi pregunta es cómo usar const LIBRARY = 'library';componentes.

Como su nombre lo indica, esto es algo para incluir bibliotecas de terceros, pero cualquiera puede darme un ejemplo sobre cómo incluir una biblioteca y usar la biblioteca en el nivel de aplicación global.

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

No encontré ninguna información sobre const LIBRARY = 'library';en la documentación oficial de Magento 2 Registre su componente .

Krishna ijjada
fuente

Respuestas:

2

No estoy seguro de por qué no está documentado en la documentación oficial, pero así es como debería hacerse por lo que entiendo:

Por lo tanto, es muy similar a la forma en que registran los módulos, solo necesita crear lib/internal/Your/Library/registration.phpcon el siguiente contenido:

<?php

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

También puede encontrar que la ubicación correcta está debidamente documentada aquí: http://devdocs.magento.com/guides/v2.0/architecture/archi_perspectives/components/modules/mod_conventions.html

Para usar / cargar estas bibliotecas, siga el mismo camino que se hace con la Magento\Frameworkbiblioteca. Entonces usando:

use Your\Library\Custom\Class;

Puedes encontrar el núcleo registration.phpen la lib/internal/Magento/Frameworkcarpeta

Raphael en Digital Pianism
fuente
Gracias @Raphael, ¿Puede darme un ejemplo sobre cómo usar / cargar estas bibliotecas agregadas "LIBRARY = 'library" en implementaciones de terceros / personalizadas.
Krishna ijjada
Espero tener un ejemplo básico sobre cómo usar esto en tiempo real.
Krishna ijjada
@ Krishati95Dev ver mi respuesta actualizada
Raphael en Digital Pianism
1

Puede consultar el archivo principal donde se ha utilizado. Aquí está el ejemplo que puede serle útil. Debe dar el nombre que desea incluir: -

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

Ejemplo:

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

Podría obtener la respuesta /magento//a/163418/36759 para trabajar, pero solo después de declarar espacios de nombres dentro de las clases en la biblioteca, así que tenlo en cuenta.

bh-
fuente
0

Desde Magento 2.2, el enfoque de biblioteca medio documentado descrito ya no funciona. Magento alienta a los desarrolladores a agregar bibliotecas usando el compositor de acuerdo con:

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

Lo que funcionaría sería agregar su propio cargador 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;
  }
});

Esto funciona debido a app/etc/NonComposerComponentRegistration.phpque todavía incluye los siguientes directorios:

$pathList[] = dirname(dirname(__DIR__)) . '/lib/internal/*/*/registration.php';
$pathList[] = dirname(dirname(__DIR__)) . '/lib/internal/*/*/*/registration.php';
Dominik en NETZKOLLEKTIV
fuente