Ich habe diese Hilfsklasse in 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;
}
}
Die Funktion getCountryIsoCode () hat ein Beispiel als Parameter ('US').
Ich weiß nicht, warum getIso3Code () nicht funktioniert. Stattdessen funktioniert getData () einwandfrei.
In Magento2 gibt es keine "PHP Magic-Funktion zum Abrufen des Datenbanktabellenfelds" mehr?
Stimmt etwas in meinem Code nicht?
quelle
Kein Magento 2 verwendet auch magische Methoden zum Abrufen / Festlegen. Wenn du diese Magie sehen willst. Bitte versuchen Sie dies:
Dadurch wird der
country_id
Wert des ersten Objekts gemäß Ihrem Code ausgegeben .Nun stellt sich die Frage, was mit dem Anruf passiert
getIso3Code()
. Nun, hier ist die Wendung. Magentos magischer Getter interpretiert diesen Aufruf alsiso_3_code
offensichtlich undefiniert, daher erhalten Sienull
als Ergebnis.Warum Magento diesen Aufruf so behandelt, weil es
preg_replace()
intern eine Methode verwendet , um den echten Code von dem von uns verwendeten Magic Getter abzurufen. Dies bedeutet, dassgetCountryId()
Magento beim Aufrufen über eine interne Logik verfügt, die den tatsächlichen Code ermittelt, nach dem Sie suchencountry_id
. Dieselbe interne Logik schlägt im Falle desgetIso3Code()
Auftretens dieser Nummer fehl3
.In diesem speziellen Fall ist es daher besser, den
getData('iso3_code')
Anruf zu verwenden .Ich hoffe, das gibt Ihnen ein klares Bild.
quelle