Tengo esta clase de ayuda en 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;
}
}
La función getCountryIsoCode () tiene un ejemplo como parámetro ('US').
No sé por qué getIso3Code () no funciona. En cambio, getData () funciona perfectamente.
¿En Magento2 ya no hay "función mágica php para obtener el campo de la tabla de la base de datos"?
¿Hay algo mal en mi código?
fuente
No Magento 2 también usa métodos mágicos get / set. Si quieres ver esa magia. Por favor intente esto:
Esto generará el
country_id
valor del primer objeto según su código.Así que ahora la pregunta es qué sucede con la llamada
getIso3Code()
. Bueno, aquí está el giro. El captador de magia de Magento interpretará esta llamada comoiso_3_code
que obviamente no está definida, por lo tanto, obtienes elnull
resultado.Por qué Magento trata esta llamada de esta manera porque usa el
preg_replace()
método internamente para recuperar el código real del getter mágico que estamos usando. Esto significa que, cuando llamasgetCountryId()
, Magento tiene una lógica interna que rastreará el código real que estás buscandocountry_id
. Esta misma lógica interna fallará en caso degetIso3Code()
que ocurra ese número3
.Entonces, en este caso particular, es mejor usar
getData('iso3_code')
call.Espero que te dé una imagen clara.
fuente