В большинстве конструкторов класса передается объект Context. Я не мог понять, как работает этот Context Obj. Я также заметил, что иногда это передается конструктору родительского класса, как показано ниже.
public function __construct(
\Magento\Framework\App\Action\Context $context,
\Magento\Catalog\Model\Design $catalogDesign,
\Magento\Catalog\Model\Session $catalogSession,
....
parent::__construct(
$context,
$layoutFactory,
Не могли бы вы объяснить, как работает этот конкретный объект контекста?
источник
$context
?Контекстные объекты были введены для изоляции сторонних разработчиков от изменений в конструкторах абстрактных классов.
В Magento 1 абстрактные классы с большим количеством «вспомогательного» поведения считались удобным API для расширителя классов. Это вызвало огромное количество методов и неявных зависимостей в абстрактных классов (
AbstractModel
,AbstractBlock
,AbstractAction
)В Magento 2 API на основе наследования (точнее, SPI) не приветствуются, но многие устаревшие API все еще существуют. Изначально мы планировали постепенно убирать лишнее поведение из абстрактных классов. И чтобы не сломать все расширители, когда мы удалили некоторую зависимость от конструктора, мы ввели объекты Context.
Текущий план состоит в том, чтобы в какой-то момент отказаться от API на основе наследования с API на основе интерфейса.
источник