29
loading...
This website collects cookies to deliver better user experience
di.xml
como dependências nos construtores das classes instanciadas.<preference>
no arquivo di.xml
, indicando no atributo for
qual a interface e no atributo type
qual a classe que deverá ser sobrescrita e implementar os métodos determinados pela interface.<preference>
no arquivo di.xml
, indicando no atributo for
qual a classe que será sobrescrita e no atributo type
qual a classe que deverá ser sobrescrever, e nesta sobrepor o método com a mesma assinatura (desde que ele seja do publico ou protegido).di.xml
, seguindo a estruturas de pastas \{Vendor}\{Module}\etc\{area}\di.xml
.<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<!-- Override a custom Interface -->
<preference for="{Vendor}\{Module}\Api\Data\{EntityName}Interface" type="{Vendor}\{Module}\Model\{EntityName}" />
<!-- Override a Magento Class -->
<preference for="{Vendor}\{Module}\{Directory}\{ClassToReplace}" type="{Vendor}\{Module}\{Directory}\{ClassReplaced}" />
</config>
<?php
namespace {Vendor}\{Module}\Api\Data;
interface {EntityName}Interface
{
public const ATTR_NAME = '{attribute_name}';
public function getMethod(): {type};
public function setMethod(): self;
}
<?php
namespace {Vendor}\{Module}\Model;
use {Vendor}\{Module}\Api\Data\{EntityName}Interface;
use {Vendor}\{Module}\Model\ResourceModel\{ResourceModelName};
class {EntityName} implements {EntityName}Interface
{
public function getMethod(): {type}
{
return $this->getData(self::ATTR_NAME);
}
public function setMethod(string $attrName): self
{
return $this->setData(self::ATTR_NAME, $attrName);
}
}
<?php
namespace {Vendor}\{Module}\{Directory};
class {ClassToReplace}
{
public function {methodName}(): {type}
{
// Old code here
}
}
<?php
namespace {Vendor}\{Module}\{Directory};
use {Vendor}\{Module}\{Directory}\{ClassToReplace};
class {ClassReplaced} extends {ClassToReplace}
{
public function {methodName}(): {type}
{
// New code here
}
}
Valores entre chaves ({test}
) devem ser alterados na implementação do código.
php bin/magento setup:di:compile
- app/
- code/
- {Vendor}/
- {Module}/
- Api/
- Data/
- {EntityName}Interface.php
- etc/
- di.xml
- module.xml
- {Directory}/
- {ClassReplaced}.php
- Model/
- {EntityName}.php
- registration.php
- composer.json