Cách sử dụng ElementRegistrar :: LIBRARY trong Magento 2


15

Chúng tôi có 4 loại thành phần trong Magento 2, vì tôi đã sử dụng ba trong số chúng, nhưng câu hỏi của tôi là làm thế nào để sử dụng const LIBRARY = 'library';thành phần.

Như tên ngụ ý, đây là thứ bao gồm các thư viện của bên thứ ba, nhưng bất kỳ ai cũng có thể cho tôi một ví dụ về cách bao gồm thư viện và sử dụng lib ở cấp ứng dụng toàn cầu.

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

Tôi không tìm thấy bất kỳ thông tin nào const LIBRARY = 'library';trong tài liệu chính thức của Magento 2 Đăng ký thành phần của bạn .

Câu trả lời:


2

Tôi không chắc tại sao nó không được ghi lại trong tài liệu chính thức nhưng đây là cách nó nên được thực hiện từ những gì tôi hiểu:

Vì vậy, nó rất giống với cách các mô-đun đăng ký của bạn, bạn chỉ cần tạo lib/internal/Your/Library/registration.phpvới nội dung sau:

<?php

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

Ngoài ra, bạn có thể tìm đúng vị trí được ghi lại đúng cách tại đây: http://devdocs.magento.com/guides/v2.0/arch architecture / archi_perspectives / component / model / mod_conventions.html

Để sử dụng / tải các thư viện này, bạn làm theo cách tương tự như đã thực hiện với Magento\Frameworkthư viện. Vì vậy, sử dụng:

use Your\Library\Custom\Class;

Bạn có thể tìm thấy lõi registration.phptrong lib/internal/Magento/Frameworkthư mục


Cảm ơn @Raphael, xin vui lòng cho tôi một ví dụ về cách sử dụng / tải các thư viện này đã thêm "LIBRARY = 'library" trong triển khai tùy chỉnh / bên thứ ba.
Krishna ijjada

Rất mong có ví dụ cơ bản về cách sử dụng nó trong thời gian thực.
Krishna ijjada

@ Krishati95Dev xem câu trả lời được cập nhật của tôi
Raphael tại Digital Pianism

1

Bạn có thể tham khảo từ tệp lõi nơi nó được sử dụng. Đây là ví dụ này có thể giúp bạn, Bạn cần đặt tên mà bạn muốn đưa vào: -

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

Thí dụ :

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

0

Tôi có thể nhận được câu trả lời /magento//a/163418/36759 để làm việc, nhưng chỉ sau khi khai báo không gian tên bên trong các lớp trong thư viện, vì vậy hãy ghi nhớ điều đó.


0

Từ Magento 2.2, cách tiếp cận thư viện được mô tả một nửa không còn hoạt động nữa. Magento khuyến khích các nhà phát triển thêm thư viện bằng cách sử dụng trình soạn thảo theo:

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

Những gì hoạt động sẽ được thêm trình tải tự động của riêng bạn: 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;
  }
});

Điều này hoạt động do app/etc/NonComposerComponentRegistration.phpvẫn bao gồm các thư mục sau:

$pathList[] = dirname(dirname(__DIR__)) . '/lib/internal/*/*/registration.php';
$pathList[] = dirname(dirname(__DIR__)) . '/lib/internal/*/*/*/registration.php';
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.