Saya memiliki kelas pembantu ini di 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;
}
}
Fungsi getCountryIsoCode () memiliki contoh sebagai parameter ('AS').
Saya tidak mengerti mengapa getIso3Code () tidak berfungsi. Sebaliknya getData () berfungsi dengan sempurna.
Di Magento2 tidak ada lagi "fungsi sulap php untuk mendapatkan bidang tabel basis data" lagi?
Apakah ada yang salah dalam kode saya?
sumber
No Magento 2 juga menggunakan metode sulap get / set. Jika Anda ingin melihat keajaiban itu. Silakan coba ini:
Ini akan menampilkan
country_id
nilai objek pertama sesuai kode Anda.Jadi sekarang pertanyaannya adalah apa yang terjadi dengan panggilan itu
getIso3Code()
. Nah, ini twistnya. Pembuat sihir Magento akan menafsirkan panggilan ini sebagaiiso_3_code
yang jelas tidak terdefinisi, maka Anda dapatkannull
hasilnya.Mengapa Magento memperlakukan panggilan ini dengan cara ini karena, ia menggunakan
preg_replace()
metode internal untuk mengambil kode asli dari pembuat sihir yang kami gunakan. Ini berarti, ketika Anda menelepongetCountryId()
, Magento memiliki logika internal yang akan melacak kode nyata yang Anda caricountry_id
. Logika internal yang sama ini akan gagal jika terjadigetIso3Code()
karena nomor tersebut3
.Jadi dalam kasus khusus ini, lebih baik menggunakan
getData('iso3_code')
panggilan.Semoga itu akan memberi Anda gambaran yang jelas.
sumber