Herhangi bir sınıfın kurucusundaki Bağlam Nesnesi amacı nedir? Bağlam nasıl çalışır?


23

Sınıfın Yapıcılarının çoğunda, bir Context nesnesi iletilir. Bu İçerik Konjesinin nasıl çalıştığını anlayamadım. Ayrıca bazen bunun aşağıdaki gibi üst sınıfın kurucusuna iletildiğini de fark ettim.

public function __construct(
    \Magento\Framework\App\Action\Context $context,
    \Magento\Catalog\Model\Design $catalogDesign,
    \Magento\Catalog\Model\Session $catalogSession,
....
    parent::__construct(
        $context,
        $layoutFactory,

Bu özel içerik nesnesinin nasıl çalıştığını açıklayabilir misiniz?

Yanıtlar:


30

Farklı Context nesneleri olduğunu unutmayın, bu durumda bu \Magento\Framework\App\Action\Contextve onu anlamak için "ActionContext" olarak okumalısınız. Eylemin yürütüldüğü uygulama bağlamını temsil eder. Başka bir deyişle, kayıt defteri veya istek nesnesi gibi denetleyici eyleminin gerektirdiği uygulama durumundaki tüm nesnelere erişim sağlar.

Bağlam sınıflarının kendi işlevleri yoktur, bunlar yalnızca diğer nesneler için bir kapsayıcıdır. Her denetleyici eyleminde 20 parametreye sahip olmamak için bunları kısayol olarak görebilirsiniz. Bağlam nesnesinde tüm ortak parametreler birleştirilir.


hangi nesnenin farklı içerdiğini nasıl bilebilirim $context?
LucScu

@LucaS kaynak kodlarına bakar. İçerdiği sınıfları bağlam kurucusunda
buluyorsunuz

15

Üçüncü taraf geliştiricilerini soyut sınıf kurucularındaki değişikliklerden izole etmek için bağlam nesneleri tanıtıldı.

Magento'da 1 Çok "yardımcı" davranışı olan soyut sınıflar, sınıf genişletici için uygun bir API olarak kabul edildi. Bu soyut sınıflarda yöntem ve örtük bağımlılıkları büyük sayılar (neden AbstractModel, AbstractBlock,AbstractAction )

Magento 2'de kalıtım temelli API'ler (daha doğrusu SPI'ler) önerilmemektedir, ancak birçok eski API hala mevcuttur. Başlangıçta, soyut derslerden ilave davranışları kademeli olarak kaldırmayı planladık. Yapıcıdan bir miktar bağımlılık kaldıracağımız zaman bütün genişleticileri kırmamak için, Context nesnelerini tanıttık.

Mevcut plan, bir noktada mirasa dayalı API'leri arayüz tabanlı API'lerle terk etmektir.

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.