У меня есть этот вспомогательный класс в 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;
}
}
Функция getCountryIsoCode () имеет пример в качестве параметра ('US').
Я не понимаю, почему getIso3Code () не работает. Вместо этого getData () работает отлично.
В Magento2 больше нет "магической функции php для получения поля таблицы базы данных"?
Что-то не так в моем коде?
источник
Никакой Magento 2 также не использует магические методы get / set. Если вы хотите увидеть это волшебство. Пожалуйста, попробуйте это:
Это выведет
country_id
значение первого объекта согласно вашему коду.Итак, теперь вопрос в том, что происходит с вызовом
getIso3Code()
. Ну, вот поворот. Магический получатель Magento будет интерпретировать этот вызов какiso_3_code
явно неопределенный, поэтому вы получитеnull
результат.Почему Magento так обрабатывает этот вызов, потому что он использует
preg_replace()
метод для извлечения реального кода из используемого нами волшебного добытчика. Это означает, что когда вы звонитеgetCountryId()
, у Magento есть внутренняя логика, которая будет отслеживать реальный код, который вы ищетеcountry_id
. Эта же внутренняя логика потерпит неудачу из-getIso3Code()
за появления этого числа3
.Так что в этом конкретном случае лучше использовать
getData('iso3_code')
вызов.Надеюсь, что это даст вам четкую картину.
источник