PHP-magento中如何寻找getSingleton实例化的类所在的文件?

PHP-magento中如何寻找getSingleton实例化的类所在的文件?

晚风撩人 发布于 2017-06-13 字数 480 浏览 1250 回复 3

Mage::getSingleton('adminhtml/session');还有个常用的例子Mage::getSingleton('core/resource')
这种方法实例化的类文件是在哪里找到的呢?

之所以要这样做,其实是因为Magento没有官方技术文档,因此在核心文件中使用到的很多方法都必须要靠去阅读定义它的那个文件来弄明白该方法的用途,或者说magento本身定义了什么方法是可以供我们开发者调用的。像getModel啊或者renderLayout这种很容易就能找到对应的Modle文件或者layout文件,但惟独getSingleton这方法我不知道它是怎么寻找类文件路径的

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

灵芸 2017-07-26 3 楼

经过寻找,我发现getSingleton()方法与getModel寻找类路径的规律是一样的,比如说getSingleton('adminhtml/session')则是实例化adminhtml模块中的/model/session.php文件,同理,若是getSingleton('adminhtml/aaa_session')则是实例化adminhtml模块中的/model/aaa/session.php

泛泛之交 2017-07-21 2 楼

和getModel功能一样,通过配置文件去找到对应的model类并实例化,区别是getSingleton创建的对象是单例,这是通过registry来实现的。

浮生未歇 2017-07-01 1 楼

看源代码就知道了,如果输入参数会在模块的Model文件夹内寻找对应的文件并实例化。

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);
}