Magento 2 không cho phép liên kết các Mô-đun bằng cách sử dụng liên kết tượng trưng


10

Tôi đã thêm một mô-đun phát triển cục bộ (riêng git repo) vào Magento 2 bằng các liên kết tượng trưng và nó hoạt động tốt cho đến khi tôi nhấn các mẫu PHTML. Sau khi gỡ lỗi nặng, tôi phát hiện ra rằng lớp hệ thống tập tin Magento 2 ( Magento\Framework\Filesystem\Directory\Read) sử dụng một isExists()phương thức kết hợp với một getAbsolutePath()cuộc gọi để xem liệu mẫu PHTML có tồn tại hay không. Tuy nhiên, getAbsolutePath()phương thức kiểm tra xem đường dẫn tương đối có tồn tại trong hệ thống tệp Magento 2 hay không và nếu không, nó sẽ thêm vào gốc Magento 2. nó Trong trường hợp của tôi, mô-đun sống trong một repo riêng /git/Atrong khi Magento sống /site/Bvà hành vi này kiểm tra sự tồn tại của mẫu PHTML trong /site/B/git/A.

Tóm lại: Các mẫu PHTML sống bên ngoài hệ thống tệp gốc Magento 2 không được chọn, bất kể cài đặt Cấu hình hệ thống "Cho phép Liên kết" được bật. Có vẻ như cài đặt đang hoạt động, nhưng chỉ khi nguồn của liên kết tượng trưng vẫn nằm trong hệ thống tệp Magento 2.

Có ai khác gặp phải điều này? Điều gì sẽ là cách tốt nhất để xử lý sự phát triển trong một repo git bên ngoài?


50/50 lỗi / tính năng. Tôi nói tập tin một vấn đề .
benmark

@benmark đây là vấn đề đã biết có cách giải quyết, hãy xem câu trả lời của tôi
Alex Paliarush

Câu trả lời:


9

Hackish cách giải quyết nếu bạn đang sử dụng kho lưu trữ đường dẫn tổng hợp cho mô-đun của mình.

Trong registration.phpđặt:

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Module_Name',
    isset($file) ? dirname($file) : __DIR__
);

Điều này sẽ đăng ký mô-đun của bạn theo đường dẫn liên kết trong thư mục nhà cung cấp gốc của Magento thay vì đường dẫn thực của nó.


1
Giải pháp này hiệu quả với tôi cho đến khi tôi nâng cấp lên Magento 2.3 (Tôi đang gặp lỗi 'Tệp mẫu không hợp lệ ...'). Bất kỳ ý tưởng làm thế nào để giải quyết nó?
Pini

Xin lỗi, không. Bạn có chắc chắn điều này hoạt động khi bạn không sử dụng symlink? Nếu vậy, bạn sẽ phải gỡ lỗi cách M2.3 đang tải mẫu. Có thể mở một câu hỏi khác?
fsw

Nó hoạt động mà không có symlink.
Pini

Tôi sử dụng Vagrant trong quá trình phát triển. Tôi liên kết /vagrant/app/code/Vendor/đến /var/www/shop/app/code/Vendor. Điều này đã giải quyết nó cho tôi!
BugHunterUK

Tôi đã trở lại. Giải pháp này không hoạt động. Khi tôi sử dụng điều này để liên kết mã mô-đun của mình, các tuyến adminhtml cho mô-đun của tôi sẽ không hoạt động. Tôi đã xác nhận điều này bằng cách xóa symlink và sao chép các tập tin vào thư mục app / code. Các plugin sau đó làm việc. Bạn có thể xác nhận bằng cách tạo ra mô-đun này và symlinking nó: devdocs.magento.com/guides/v2.3/ext-best-practices/... ... bạn sẽ nhận được cùng một vấn đề tôi đã có.
BugHunterUK

4

Cũng có thể thao tác đăng ký.php để trỏ đến root dev của bạn.

Để đảm bảo nó được tải, bạn sẽ phải thực hiện việc đăng ký.php ở đâu đó trong quy trình bootstrap của mình.

Cách dễ nhất (không cần cài đặt qua trình soạn thảo) là thêm thủ công vào nhà cung cấp / nhà soạn nhạc / autoload_files.php.

Tôi cũng nghĩ về việc viết một mô-đun cho việc này. Mô-đun này cũng có thể hữu ích cho các môi trường kiểm tra tích hợp (để thêm và xóa các mô-đun một cách nhanh chóng mà không phải sao chép chúng ở đâu đó).

=== CẬP NHẬT ===

bây giờ tôi đã viết mô-đun: http://github.com/davidverholen/magento2-dynamic-component-registry

Ngoài ra, tôi nghĩ rằng có thể liên kết các mô-đun bằng cách sử dụng các liên kết tương đối


3

Có thể bật / cho phép các liên kết tượng trưng thông qua Cửa hàng => Cấu hình => Nâng cao => Nhà phát triển => Cài đặt mẫu (giống như trong Magento 1.x):

Tùy chọn cấu hình

(Tôi đã không kiểm tra nếu cài đặt này hoạt động)

Ngoài ra, bạn có thể sử dụng các mô hình con, theo cách này bạn không cần liên kết tượng trưng.

Để phát triển, tôi phát triển các mô-đun trong một thư mục riêng và sử dụng PHPStorm để sao chép chúng vào bản cài đặt phát triển Magento 2 của tôi.


1
Cảm ơn. Cài đặt tôi đã đề cập thực sự là cài đặt "Cho phép Liên kết" trong "Cài đặt mẫu". Nó hoạt động độc đáo trong Magento 1.x, nhưng bây giờ trong Magento 2, các tệp cần phải nằm trong thư mục gốc của Magento, vì vậy không chỉ ở bất kỳ đâu trên hệ thống tệp. Dù sao, tôi sẽ ổn thôi - có lẽ tôi sẽ sử dụng các mô hình con :)
Jisse Reitsma

Jisse, chỉ là một ý nghĩ ... bạn cũng có thể sử dụng trình soạn thảo để lắp ráp các mô-đun riêng biệt khi bạn tạo các tạo phẩm xây dựng của mình, điều này có xu hướng tránh một số vấn đề bạn có thể gặp phải với các mô đun con git, mặc dù nó có thể làm tăng thêm sự phức tạp của bản dựng của bạn quá trình. AFAIK, đây là cách được đề nghị của Magento để xử lý tình huống.
Bryan 'BJ' Hoffpauir Jr.

Cảm ơn, các tùy chọn PHPStorm đã giải quyết nó cho tôi, nhưng như @ alex-paliurush đã chỉ ra, có một số tình huống mà cách giải quyết đơn giản là không hoạt động. Tôi sẽ thêm một PR thay thế.
Jisse Reitsma

Cảm ơn Bryan cho đề nghị của bạn là tốt. Tuy nhiên, nhà soạn nhạc hoàn hảo khi giao dịch với các trang sản xuất, nhưng tôi đang tìm kiếm một cách tốt hơn để phát triển các mô-đun tùy chỉnh. Nhà soạn nhạc chưa nên chơi, vì đó là cách phân phối mã mà tôi cần phát triển trong Magento 2 trước, vì vậy, nhà soạn nhạc luôn có nhiều cam kết khác nhau phía sau. Điều đó đang được nói, PhpStorm (và các IDE khác) đã cung cấp một giải pháp cho việc này. Vì vậy, vấn đề duy nhất còn lại là các trang web sản xuất bị giới hạn liên kết tượng trưng này và sau đó các đối số của bạn bắt đầu :)
Jisse Reitsma

3

Nếu bạn phát triển bằng PHP Storm, chỉ cần sao chép kho lưu trữ thứ hai vào thư mục gốc của dự án Magento. Sau đó tạo liên kết tượng trưng cần thiết để kích hoạt mô-đun. PHP Storm sẽ coi dự án này là đa hướng và sẽ nhận ra cả hai kho lưu trữ. Bạn có thể chọn giữa chiến lược quản lý kho lưu trữ đồng bộ và không đồng bộ (mặc định) .

Vấn đề này cũng xảy ra khi EE (hoặc bất kỳ mô-đun nào khác) được liên kết với CE bằng cách sử dụng liên kết tượng trưng. Nguyên nhân gốc là registration.phptính toán đường dẫn mô-đun cơ sở là đường dẫn thực đến thư mục (trong trường hợp của bạn là bên ngoài dự án Magento). Đó là lý do tại sao đường dẫn tương đối được tính toán không chính xác, và sau đó đường dẫn tuyệt đối cũng không chính xác. Nếu kho lưu trữ thứ hai được đặt dưới gốc Magento, đường dẫn tương đối sẽ trỏ đến đường dẫn tệp thực (không phải liên kết tượng trưng), nhưng nó vẫn sẽ được tìm thấy, vì vậy mọi thứ sẽ hoạt động.

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.