Eu tenho essa classe auxiliar no Magento 2:
class Data extends \Magento\Framework\App\Helper\AbstractHelper
{
protected $_countryFactory;
public function __construct(
\Magento\Directory\Model\CountryFactory $countryFactory
)
{
$this->_countryFactory = $countryFactory;
}
public function getCountryIsoCode($country = 'US')
{
$country = $this->_countryFactory->create()->getCollection();
$country->addFieldToFilter('country_id', array('eq' => country));
$countryCode = $country->getFirstItem()->getIso3Code());
$countryCode2 = $country->getFirstItem()->getData('iso3_code'));
// $countryCode => null
// $countryCode2 => 'USA'
return $countryCode;
}
}
A função getCountryIsoCode () tem um exemplo como parâmetro ('US').
Não sei por que o getIso3Code () não funciona. Em vez disso, o getData () funciona perfeitamente.
No Magento2 não há mais "função php magic para obter o campo da tabela do banco de dados"?
Existe algo errado no meu código?
fonte
No Magento 2 também usa métodos mágicos get / set. Se você quiser ver essas mágicas. Por favor tente isto:
Isso produzirá o
country_id
valor do primeiro objeto conforme seu código.Então agora a questão é o que acontece com a ligação
getIso3Code()
. Bem, aqui está a reviravolta. O getter mágico do Magento interpretará essa chamada comoiso_3_code
obviamente indefinida, portanto você obtémnull
como resultado.Por que o Magento trata essa chamada dessa maneira porque, ele usa o
preg_replace()
método internamente para recuperar o código real do getter mágico que estamos usando. Isto significa que, quando você ligagetCountryId()
, o Magento tem uma lógica interna que rastreará o código real que você está procurandocountry_id
. Essa mesma lógica interna falharágetIso3Code()
devido à ocorrência desse número3
.Portanto, nesse caso em particular, é melhor usar a
getData('iso3_code')
chamada.Espero que isso lhe dê uma imagem clara.
fonte