Magento 2, semboller kullanarak Modüllerin bağlanmasına izin vermez


10

Magento 2'ye sembolik bağlantılar kullanarak bir yerel geliştirme modülü (ayrı git repo) ekledim ve PHTML şablonlarına çarpana kadar iyi çalışıyordu. Ağır hata ayıklama sonra Magento 2 dosya sistemi class ( Magento\Framework\Filesystem\Directory\Read) PHTML şablonu olup olmadığını görmek için isExists()bir getAbsolutePath()çağrı ile birlikte bir yöntem kullandığını öğrendim. Ancak, getAbsolutePath()yöntem göreli yolun Magento 2 dosya sisteminde var olup olmadığını kontrol eder ve eğer değilse Magento 2 kökünü öneriyor. o. Benim durumumda, modül /git/AMagento yaşarken ayrı /site/Bbir repoda yaşıyor ve bu davranış bir PHTML şablonunun varlığını kontrol ediyor /site/B/git/A.

Kısaca: Magento 2 kök dosya sisteminin dışında yaşayan PHTML şablonları, Sistem Yapılandırması "Symlink'lere İzin Ver" seçeneği ne olursa olsun alınmaz. Görünüşe göre ayar çalışıyor, ancak yalnızca symlink kaynağı hala Magento 2 dosya sisteminde bulunuyorsa.

Başka kimse bununla karşılaştı mı? Harici bir git deposunda gelişmenin üstesinden gelmenin en iyi yolu ne olurdu?


50/50 hata / özellik. Dosya diyorum diyorum .
benmarks

@benmarks bu bir geçici çözüm olan bilinen bir sorundur, cevabım bakın
Alex Paliarush

Yanıtlar:


9

Modülünüz için besteci yolu deposunu kullanıyorsanız geçici çözümü deneyin .

In registration.phpkoymak:

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

Bu, modülünüzü gerçek yolu yerine Magento'nun kök satıcı dizininde sembolik yol olarak kaydeder.


1
Bu çözüm Magento 2.3 sürümüne yükselene kadar benim için çalıştı ('Geçersiz Şablon Dosyası ...' hatası alıyorum). Nasıl çözüleceği hakkında bir fikrin var mı?
Pini

Üzgünüm hayır. Symlink kullanmadığınızda bunun çalıştığından emin misiniz? Öyleyse M2.3'ün şablonları nasıl yüklediğini hata ayıklamanız gerekir. Belki başka bir soru açar?
fsw

Symlink olmadan çalışıyor.
Pini

Geliştirme sırasında Vagrant kullanıyorum. Ben sembolik bir link /vagrant/app/code/Vendor/için /var/www/shop/app/code/Vendor. Bu benim için çözdü!
BugHunterUK

Geri döndüm. Bu çözüm işe yaramıyor. Ben modül kodumu symlink için kullandığımda benim modül için adminhtml yolları işe yaramaz. Symlink'i kaldırarak ve dosyaları uygulama / kod dizinine kopyalayarak bunu onayladım. Eklenti daha sonra çalıştı. Bu modülü oluşturarak ve işaretleyerek onaylayabilirsiniz: devdocs.magento.com/guides/v2.3/ext-best-practices/… ... sahip olduğum aynı sorunu alacaksınız.
BugHunterUK

4

Ayrıca dev kök dizinine işaret etmek için registration.php dosyasını değiştirmek de mümkün olmalıdır.

Yüklendiğinden emin olmak için, bootstrap işleminizin bir yerinde registration.php dosyasını yürütmeniz gerekir.

En kolay yol (besteci aracılığıyla yüklemeden) bunu satıcıya / besteciye / autoload_files.php dosyasına manuel olarak eklemek olacaktır.

Bunun için bir modül yazmayı da düşündüm. Bu modül ayrıca entegrasyon test ortamları için de kullanılabilir (bir yere kopyalamak zorunda kalmadan modülleri anında eklemek ve kaldırmak için).

=== GÜNCELLEME ===

şimdiye kadar modülü yazdım: http://github.com/davidverholen/magento2-dynamic-component-registry

Ayrıca, göreceli semboller kullanarak modülleri bağlamak mümkün olmalıdır.


3

Mağazalar => Yapılandırma => Gelişmiş => Geliştirici => Şablon Ayarları üzerinden sembol bağlantılarını etkinleştirmek / izin vermek mümkündür (tıpkı Magento 1.x'de olduğu gibi):

Yapılandırma seçeneği

(Bu ayarın çalışıp çalışmadığını test etmedim)

Ayrıca alt modülleri kullanabilirsiniz, bu şekilde sembolik bağlantılara ihtiyacınız yoktur.

Geliştirme için modülleri ayrı bir dizinde geliştiririm ve PHPStorm'u Magento 2'nin geliştirme kurulumuma kopyalamak için kullanırım.


1
Teşekkürler. Bahsettiğim ayar gerçekten de "Şablon Ayarları" altındaki "Simge Bağlantılarına İzin Ver" ayarıdır. Magento 1.x altında güzel çalışıyor, ancak şimdi Magento 2 altında, dosyaların Magento kökü içinde olması gerekiyor, bu yüzden dosya sisteminin herhangi bir yerinde değil. Her neyse, iyi olacağım - muhtemelen alt modülleri kullanacağım :)
Jisse Reitsma

Jisse, sadece bir düşünce ... derleme yapılarınızı üretirken ayrı modülleri birleştirmek için besteci de kullanabilirsiniz, bu da git alt modülleriyle karşılaşabileceğiniz bazı sorunlardan kaçınma eğilimindedir, ancak yapınızın karmaşıklığına katkıda bulunabilir. süreci. AFAIK, Magento'nun durumu ele alması için önerilen yolu bu.
Bryan 'BJ' Hoffpauir Jr.

Teşekkürler, PHPStorm seçenekleri zaten benim için çözdü, ancak @ alex-paliurush'un işaret ettiği gibi, geçici çözümün çalışmadığı bazı senaryolar var. Bunun yerine bir PR ekleyeceğim.
Jisse Reitsma

Öneri için teşekkürler Bryan. Ancak, besteci üretim alanlarıyla uğraşırken mükemmeldir, ancak özel modüller geliştirmenin daha iyi bir yolunu arıyordum. Besteci henüz oyunda olmamalı, çünkü önce Magento 2 içinde geliştirmem gereken kodu dağıtmanın bir yolu, bu yüzden besteci her zaman çeşitli taahhütler veriyor. Bununla birlikte, PhpStorm (ve diğer IDE'ler) zaten bunun için bir çözüm sunuyor. Geriye kalan tek sorun, üretim sitelerinin bu sembolik sınırlamadan muzdarip olması ve daha sonra argümanlarınızın
devreye girmesi

3

PHP Storm kullanarak geliştiriyorsanız, ikinci havuzu Magento proje kök dizinine kopyalayın. Ardından modülü etkinleştirmek için gerekli sembolik bağlantıları oluşturun. PHP Storm bu projeyi çok köklü olarak ele alacak ve her iki havuzu da tanıyacaktır. Eşzamanlı ve eşzamansız (varsayılan) havuz yönetim stratejileri arasında seçim yapabilirsiniz .

Bu sorun, EE (veya başka herhangi bir modül) semboller kullanılarak CE'ye bağlandığında da oluşur. Temel neden, registration.phptemel modül yolunu dizine gerçek yol olarak hesaplamanızdır (sizin durumunuzda Magento projesinin dışındaysa). Bu nedenle göreli yol yanlış hesaplanır ve mutlak yol da yanlıştır. İkinci havuz Magento kökü altına konursa, göreli yol gerçek dosya yoluna (sembolik bağlantıya değil) işaret eder, ancak yine de bulunur, bu yüzden her şey çalışır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.