Magento 2: yardımcıların doğru kullanımı


9

Şablon dosyalarında aşağıdakileri kullanabilmek için daha fazla kişi yardımcı sınıflarını bildirmeye başlıyorum:

$this->helper('Path/To/Helper/Class')->customMethod();

Bu tür bir kod insanlar nesne yöneticisi doğrudan kısıtlama kullanmayın önlemek sağlar ama bu yardımcıları blok kodu olması gereken kodu görmek eğilimindedir.

Sorularım işte burada:

  • yardımcı sınıflara ne yazmalı?
  • hangi durumlarda şablonlarda yardımcı yöntemler kullanmak önemlidir?

Yanıtlar:


20

Yapma.
Bu ObjectManager::getInstance()->create()bir şablonda kullanmak gibidir !
Bunun yerine yardımcıyı yapıcı bağımlılığı olarak alan özel bir Blok kullanın ve yardımcı yöntemi çağıran bir proxy yöntemi ekleyin.

Şablonda:

$block->customMethod()

Blokta:

public function __construct(Path/To/Helper/Class $helperClass, ...other dependencies...)
{
    $this->helper = $helperClass;
    // ...other assignments and call to parent::__construct()
}

public function customMethod()
{
    return $this->helper->customMethod();
}

OOP ilkesinde bu "Demeter Yasası" nı ihlal etmekten kaçınıyor. İş mantığını, şablon yerine blok içinde saklar. Bir yan etki olarak, mantık bloğa taşınırken mantığı daha test edilebilir hale getirir.

Yardımcı sınıflara hangi mantığın konduğuyla ilgili olarak, Magento 2 yardımcılarının çoğunlukla model için olmayan, ancak fiyat biçimlendirmesi (çekirdekte bulunan, ancak Şu anda daha iyi bir örnek düşünmeyin).


Ben prensibi kabul ediyorum, ancak di.xmlblok sınıf tipi için tercih kullanarak , bazı düzen yapılandırma tutmak gibi görünüyor . Örneğin sınıf için yapmaya çalıştım \Magento\Catalog\Block\Product\View\Type\Simple, şablonumuzda default.phtmlkullanılan şablon göz ardı edilir. Şu anda neden bir ipucu yok
Sylvain Rayé

2
Daha güncel bilgiler için buraya atlayın. 2.2'den itibaren Block sınıflarının genişletilmesi önerilmez. Bunun yerine, özel sunum mantığı gerekiyorsa, bir ViewModel tanımlanmalı ve layout.xml dosyasındaki Block için bağımsız değişken olarak bildirilmelidir. ViewModels, Object Manager aracılığıyla oluşturulduğundan, kendinizi Magento 2'nin gelecekteki sürümlerinde BC kırma değişikliklerine maruz bırakmadan kendi bağımlılık grafiğinizi oluşturabilirsiniz
John Hall

1

Yardımcıları modülünüzün içinde global işlevler olarak görüyorum ('global' kelimesi için özür dilerim) ve yöneticiler / servis sözleşmeleri modülünüzün dışında olduğu gibi içeride de kullanımına izin verilen global işlevler olarak görüyorum.

Bu prensibi izlerseniz, yardımcılar için minimum kullanım olduğunu görürsünüz, bunları yalnızca modüllerimde bir yapılandırma sarıcısı olarak kullanırım.

$this->configHelper->get(Config::PATH_TO_XML_PATH);
$this->configHelper->isEnabled();

Bu tür şeyler. Modülünüz dışında pratik olabilecek başka bir işleve sahipseniz bunun yerine bir yönetici oluşturun.

İdeal bir dünyada, diğer modüllerin işlevselliğine ihtiyaç duyan 3. taraf geliştiricilerin sadece depolar ve yöneticiler için mevcut arabirimlere ve Apiklasördeki şeylere bakması gerekir.

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.