Почему Mage :: getModel () не используется для классов модели ресурсов?
-
16-10-2019 - |
Вопрос
Это фрагмент кода из app/code/core/Mage/Catalog/etc/config.xml
.
<config>
..............
<global>
<models>
<catalog>
<class>Mage_Catalog_Model</class>
<resourceModel>catalog_resource</resourceModel>
</catalog>
<catalog_resource>
<class>Mage_Catalog_Model_Resource</class>
<deprecatedNode>catalog_resource_eav_mysql4</deprecatedNode>
<entities>
<product>
<table>catalog_product_entity</table>
</product>
................
</config>
Мы можем создать объект mage_catalog_model_porduct как
$model = Mage::getModel('catalog/product');
Точно так же может создать объект модели ресурса следующим образом.
$resourceModel = Mage::getModel('catalog_resource/product');
Я знаю, что в основном уже есть функция как Mage::getResourceModel();
Анкет Пример: Mage::getResourceModel('catalog/product');
Но этот способ также работает нормально.
Кто -нибудь может объяснить, почему не использовать Mage::getModel()
Чтобы получить объект модели ресурса? Любые предложения будут оценены.
Решение
Это только мое мнение, так что не стесняйтесь защищать это, но я думаю, что в теории вы можете изменить класс модели ресурсов. Например, я могу добавить в свой собственный модуль это:
<global>
<models>
<catalog>
<resourceModel>my_resource</resourceModel>
</catalog>
<my_resource>
<class>My_Module_Model_Resource</class>
....
Если бы я использовал Mage::getModel('catalog_resource/product')
Я бы получил и экземпляр исходного класса, потому что в конфигурации декларация все еще существует.
но позвонив Mage::getResourceModel('catalog/product')
Теперь я получаю и экземпляр моего нового класса.
Так что я могу сделать вывод, что причина, по которой он «расширяется».
Другая причина может состоять в том, чтобы сохранить последовательность.
Если вы позвоните Mage::getModel($someParam)
Вы получите соответствующую модель ресурса, используя тот же параметр: $someParam
.