W większości konstruktorów klasy przekazywany jest obiekt Context. Nie mogłem zrozumieć, jak działa ten kontekst kontekstowy. Zauważyłem również, że czasami jest to przekazywane konstruktorowi klasy nadrzędnej, jak poniżej.
public function __construct(
\Magento\Framework\App\Action\Context $context,
\Magento\Catalog\Model\Design $catalogDesign,
\Magento\Catalog\Model\Session $catalogSession,
....
parent::__construct(
$context,
$layoutFactory,
Czy możesz wyjaśnić, jak działa ten konkretny obiekt kontekstowy?
źródło
$context
?Obiekty kontekstowe zostały wprowadzone w celu odizolowania programistów zewnętrznych od zmian w konstruktorach klas abstrakcyjnych.
W Magento 1 klasy abstrakcyjne z wieloma zachowaniami „pomocniczymi” były uważane za wygodne API dla ekstendera klas. Wywołało to ogromne liczby metod i ukrytych zależności w abstrakcyjnych klas (
AbstractModel
,AbstractBlock
,AbstractAction
)W Magento 2 interfejsy API oparte na dziedziczeniu (a dokładniej SPI) są odradzane, ale wiele starszych interfejsów API wciąż istnieje. Początkowo planowaliśmy stopniowe usuwanie dodatkowych zachowań z klas abstrakcyjnych. Aby nie łamać wszystkich ekstenderów, kiedy usuwamy pewną zależność od konstruktora, wprowadziliśmy obiekty Context.
Obecny plan polega na porzuceniu interfejsów API opartych na dziedziczeniu interfejsów API opartych na interfejsie.
źródło