J'ai cette classe d'aide dans 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 fonction getCountryIsoCode () a un exemple comme paramètre ('US').
Je ne comprends pas pourquoi getIso3Code () ne fonctionne pas. Au lieu de cela, getData () fonctionne parfaitement.
Dans Magento2, il n'y a plus de "fonction php magic pour obtenir le champ de la table de base de données"?
Y a-t-il quelque chose qui ne va pas dans mon code?
la source
Non Magento 2 utilise également des méthodes magiques get / set. Si vous voulez voir cette magie. Veuillez essayer ceci:
Cela affichera la
country_id
valeur du premier objet selon votre code.Alors maintenant, la question est de savoir ce qui se passe avec l'appel
getIso3Code()
. Eh bien, voici la torsion. Le getter magique de Magento interprétera cet appel commeiso_3_code
étant évidemment indéfini, d'oùnull
le résultat.Pourquoi Magento traite cet appel de cette façon, car il utilise une
preg_replace()
méthode en interne pour récupérer le vrai code à partir du getter magique que nous utilisons. Cela signifie que lorsque vous appelezgetCountryId()
, Magento a une logique interne qui va tracer le vrai code que vous recherchezcountry_id
. Cette même logique interne échouera en cas de engetIso3Code()
raison de l'occurrence de ce nombre3
.Donc, dans ce cas particulier, il vaut mieux utiliser
getData('iso3_code')
call.J'espère que cela vous donnera une image claire.
la source