La inyección de dependencias en Magento2 nos permitirá el uso de cualquier clase del framework como una entidad independiente y que podremos usar individualmente.
Cuando estamos programando una nueva clase en Magento2 y necesitamos cierta funcionalidad la tendremos que buscar. Esto es porque Magento2 no provee ninguna FAQ de como utilizar sus clases.
Sin embargo si necesitamos alguna función o método podremos chequear sus directorio de apis en vendor/magento/
Voy a centrarme en la clase Context cuando es invocada desde un método parent.
Hay sobre 30 clases Context en Magento2 y cada una de ellas representa el contexto en el cual la acción es ejecutada Action\Context.
«En Magento2 cuando un grupo de dependencias se usan juntas para realizar una determinada acción, se agruparan en un contexto.»
Este contexto podrá ser pasado como una entidad única a través de su constructor.
1 |
parent::__construct($context); |
Para entenderlo de forma sencilla la clase Context es un contenedor de objetos y nos dará acceso a todos ellos cuando nuestra clase lo necesite.
Por lo que las clase Context no tiene otra funcionalidad más que contener otros objetos a través de su constructor.
1 2 3 4 5 6 7 8 |
// La clase Context desde un controlador de nuestro backend use Magento\Backend\App\Action\Context; public function __construct ( Context $context) { parent::__construct($context); } |
Si nos fijamos en esta clase Context podemos comprobar que atrae muchas otras dependencias.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
public function __construct( \Magento\Framework\App\RequestInterface $request, \Magento\Framework\App\ResponseInterface $response, \Magento\Framework\ObjectManagerInterface $objectManager, \Magento\Framework\Event\ManagerInterface $eventManager, \Magento\Framework\UrlInterface $url, \Magento\Framework\App\Response\RedirectInterface $redirect, \Magento\Framework\App\ActionFlag $actionFlag, \Magento\Framework\App\ViewInterface $view, \Magento\Framework\Message\ManagerInterface $messageManager, \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory, ResultFactory $resultFactory, \Magento\Backend\Model\Session $session, \Magento\Framework\AuthorizationInterface $authorization, \Magento\Backend\Model\Auth $auth, \Magento\Backend\Helper\Data $helper, \Magento\Backend\Model\UrlInterface $backendUrl, \Magento\Framework\Data\Form\FormKey\Validator $formKeyValidator, \Magento\Framework\Locale\ResolverInterface $localeResolver, $canUseBaseUrl = false ) { parent::__construct( $request, $response, $objectManager, $eventManager, $url, $redirect, $actionFlag, $view, $messageManager, $resultRedirectFactory, $resultFactory ); $this->_session = $session; $this->_authorization = $authorization; $this->_auth = $auth; $this->_helper = $helper; $this->_backendUrl = $backendUrl; $this->_formKeyValidator = $formKeyValidator; $this->_localeResolver = $localeResolver; $this->_canUseBaseUrl = $canUseBaseUrl; } |
Si por ejemplo desde nuestro controlador de backend necesitamos el uso del objeto $_objectManager declarado en el contexto de la aplicación lo hariamos de la siguiente manera.
1 |
$model = $this->_objectManager->create(ProductInterface::class)->load($productId); |