Come utilizzare ComponentRegistrar :: LIBRARY in Magento 2


15

Abbiamo 4 tipi di componenti in Magento 2, dato che ne ho usati tre, ma la mia domanda è come usare il const LIBRARY = 'library';componente.

Come suggerisce il nome, questo è qualcosa da includere librerie di terze parti, ma chiunque può darmi un esempio su come includere una libreria e usare la lib a livello di applicazione globale.

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

Non ho trovato alcuna informazione sulla const LIBRARY = 'library';documentazione ufficiale di Magento 2 Registra il tuo componente .

Risposte:


2

Non sono sicuro del perché non sia documentato nella documentazione ufficiale, ma ecco come dovrebbe essere fatto da quello che ho capito:

Quindi è molto simile al modo in cui i tuoi moduli di registro, devi solo creare lib/internal/Your/Library/registration.phpcon il seguente contenuto:

<?php

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

Inoltre è possibile trovare la posizione corretta correttamente documentata qui: http://devdocs.magento.com/guides/v2.0/architecture/archi_perspectives/components/modules/mod_conventions.html

Per utilizzare / caricare queste librerie, seguire la stessa procedura utilizzata per la Magento\Frameworklibreria. Quindi usando:

use Your\Library\Custom\Class;

Puoi trovare il nucleo registration.phpnella lib/internal/Magento/Frameworkcartella


Grazie @Raphael, puoi per favore darmi un esempio su come utilizzare / caricare queste librerie aggiunte "LIBRARY = 'library" nelle implementazioni di terze parti / personalizzate.
Krishna ijjada

Non vedo l'ora di avere un esempio di base su come utilizzarlo in tempo reale.
Krishna ijjada

@ Krishati95Dev vedi la mia risposta aggiornata
Raffaello al Pianismo digitale

1

È possibile fare riferimento dal file principale dove è stato utilizzato. Ecco l'esempio che può esserti utile, Devi dare il nome che vuoi includere: -

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

Esempio :

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

0

Potrei ottenere la risposta /magento//a/163418/36759 per funzionare, ma solo dopo aver dichiarato gli spazi dei nomi all'interno delle classi nella libreria, quindi tienilo a mente.


0

Da Magento 2.2 l'approccio della libreria semidocumentata descritto non funziona più. Magento incoraggia gli sviluppatori ad aggiungere librerie usando il compositore secondo:

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

Ciò che funzionerebbe sarebbe aggiungere il tuo autoloader: 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;
  }
});

Questo funziona a causa del app/etc/NonComposerComponentRegistration.phpquale include ancora le seguenti directory:

$pathList[] = dirname(dirname(__DIR__)) . '/lib/internal/*/*/registration.php';
$pathList[] = dirname(dirname(__DIR__)) . '/lib/internal/*/*/*/registration.php';
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.