magento 上传csv表格中实例化对象例子

app\code\core\Mage\Dataflow\Model\Convert\Parser\csv.php

文件是后台上传csv,插入到dataflow_batch_import中转表的代码,有如下代码片段

1.$batchModel = $this->getBatchModel();

2.$batchModel->setParams($this->getVars())
->setAdapter($adapterName)
->save();

从上往下看,

第一行$this->getBatchModel();

找到对应文件

app\code\core\Mage\Dataflow\Model\Convert\Parser\Abstract.php

/**
* Retrieve Batch model singleton
*
* @return Mage_Dataflow_Model_Batch
*/
public function getBatchModel()
{
if (is_null($this->_batch)) {
$this->_batch = Mage::getSingleton('dataflow/batch');
}
return $this->_batch;
}

 

调用了Mage::getSingleton方法,再继续找对应类

app\Mage.php

/**
* Retrieve model object singleton
*
* @param string $modelClass
* @param array $arguments
* @return Mage_Core_Model_Abstract
*/
public static function getSingleton($modelClass='', array $arguments=array())
{
$registryKey = '_singleton/'.$modelClass;
if (!self::registry($registryKey)) {
self::register($registryKey, self::getModel($modelClass, $arguments));
}
return self::registry($registryKey);
}

发现最终还是会调用此类中getModel()方法

public static function getModel($modelClass = '', $arguments = array())
{
return self::getConfig()->getModelInstance($modelClass, $arguments);
}

调用此类getConfig()

/**
* Retrieve a config instance
*
* @return Mage_Core_Model_Config
*/
public static function getConfig()
{
return self::$_config;
}

会返回Mage_Core_Model_Config的一个对象,且调用getModelInstance()

对应文件是:app\code\core\Mage\Core\Model\Config.php

/**
* Get model class instance.
*
* Example:
* $config->getModelInstance('catalog/product')
*
* Will instantiate Mage_Catalog_Model_Mysql4_Product
*
* @param string $modelClass
* @param array|object $constructArguments
* @return Mage_Core_Model_Abstract|false
*/
public function getModelInstance($modelClass='', $constructArguments=array())
{
$className = $this->getModelClassName($modelClass);
if (class_exists($className)) {
Varien_Profiler::start('CORE::create_object_of::'.$className);
$obj = new $className($constructArguments);
Varien_Profiler::stop('CORE::create_object_of::'.$className);
return $obj;
} else {
return false;
}
}

会判断这个类是否存在,不存在就会new一个

传递的参数为dataflow/batch

会调用getModelClassName判断是否存在

public function getModelClassName($modelClass)
{
$modelClass = trim($modelClass);
if (strpos($modelClass, '/')===false) {
return $modelClass;
}
return $this->getGroupedClassName('model', $modelClass);
}

可以看到如果是带有斜杠,说明此类没有实例化,会new一下

返回Mage_Dataflow_Model_Batch类

此时第一行代码结束,获得对应的对象

 

转载于:https://www.cnblogs.com/you-jia/p/4763171.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值