在任何类的构造函数DI中上下文对象的用途是什么?上下文如何工作?


23

在该类的大多数构造方法中,都会传递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,

您能否解释这个特定的上下文对象如何工作?

Answers:


30

请注意,存在不同的Context对象,在这种情况下\Magento\Framework\App\Action\Context,要理解它,您应该将其阅读为“ ActionContext”。它表示在其中执行操作的应用程序上下文。换句话说,它使您可以访问具有控制器操作所需的应用程序状态的所有对象,例如注册表或请求对象。

上下文类没有自己的功能,它们只是其他对象的容器。您可以看到它们是快捷方式,每个控制器操作中没有20个参数。所有通用参数都合并在上下文对象中。


我怎么知道不同的对象包含哪些对象$context
LucScu 2016年

@LucaS看看他们的源代码。您可以在上下文构造函数中找到包含的类
Fabian Schmengler,2016年

15

引入了上下文对象,以隔离第三方开发人员与抽象类的构造函数中的更改。

在Magento 1中,具有很多“辅助”行为的抽象类被认为是类扩展器的便捷API。这导致在抽象类中的方法,并暗指的依赖庞大的数字(AbstractModelAbstractBlockAbstractAction

在Magento 2中,不鼓励使用基于继承的API(更确切地说是SPI),但是仍然存在许多传统API。最初,我们计划逐步从抽象类中删除多余的行为。为了避免在删除构造函数的某些依赖关系时破坏所有扩展程序,我们引入了Context对象。

当前的计划是在某个时候放弃基于继承的API和基于接口的API。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.