วิธีใช้ ComponentRegistrar :: LIBRARY ใน Magento 2


15

เรามีส่วนประกอบ 4 ประเภทใน Magento 2 เนื่องจากฉันใช้สามconst LIBRARY = 'library';องค์ประกอบแต่คำถามของฉันคือวิธีการใช้องค์ประกอบ

ตามชื่อบอกถึงสิ่งนี้คือสิ่งที่รวมไลบรารีบุคคลที่สาม แต่บุคคลใดสามารถให้ตัวอย่างฉันเกี่ยวกับวิธีรวมไลบรารีและใช้ lib ในระดับแอปพลิเคชันส่วนกลาง

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

ฉันไม่พบข้อมูลใด ๆ เกี่ยวกับการconst LIBRARY = 'library';อย่างเป็นทางการในวีโอไอพี 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" ในการใช้งานของบุคคลที่สาม / ที่กำหนดเอง
กฤษณะ ijjada

ฉันรอคอยที่จะมีตัวอย่างพื้นฐานเกี่ยวกับวิธีการใช้งานแบบเรียลไทม์
กฤษณะ ijjada

@ Krishati95Dev ดูคำตอบที่อัปเดตของฉัน
Raphael ที่ Digital Pianism

1

คุณสามารถอ้างอิงจากไฟล์หลักของไฟล์ที่มีการใช้งานนี่เป็นตัวอย่างที่อาจช่วยคุณได้คุณต้องให้ชื่อที่คุณต้องการรวม: -

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

ตัวอย่าง:

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

0

ฉันสามารถรับคำตอบได้ที่/magento//a/163418/36759เพื่อทำงาน แต่หลังจากประกาศชื่อ namespaces ภายในคลาสในไลบรารีดังนั้นโปรดระลึกไว้เสมอ


0

จาก Magento 2.2 วิธีการของไลบรารีแบบครึ่งเอกสารที่อธิบายไว้ใช้ไม่ได้อีกต่อไป Magento สนับสนุนให้นักพัฒนาเพิ่มห้องสมุดโดยใช้นักแต่งเพลงตาม:

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.