Mage :: app和Mage :: Magento之间的区别

zam*_*mil 4 magento

任何人都可以说Mage:app和Mage之间有什么区别::

例如:

Mage::getModel('catalog/product');

Mage::app->getLayout->createBlock('catalog/product_view');
Run Code Online (Sandbox Code Playgroud)

如果我这样试试

Mage::app->getModel('catalog/product');
Run Code Online (Sandbox Code Playgroud)

它抛出一个致命的错误

有什么基本区别?

drj*_*201 15

作为一个更一般的解释,并进一步艾伦的答案Mage::app(),Mage::getModel()都是Mage类的静态方法(app/Mage.php).

Mage::app()函数用于引导您的Magento应用程序(设置配置,自动加载等),并且在想要在您自己的自定义脚本中访问Magento模型时非常有用.

它是一个静态方法,因此也可以在应用程序的任何位置调用它来返回当前的Mage_Core_Model_App对象,您可以使用该对象获取当前配置值,例如Mage::app()->getStore()将返回当前Mage_Core_Model_Store存储对象.

Mage::app()类似于Mage::run()您的index.php文件中找到的.不同之处在于,Mage::run()除了其他功能之外,还会根据默认情况调用应用程序的MVC,路由等部分,并控制将您引导到页面并实例化块和布局模板呈现的请求/响应.

Mage::getModel()它只是一个工厂方法,它将根据您提供的类别名返回类的新实例.例如,Mage::getModel('customer/customer')将返回一个新Mage_Customer_Model_Customer对象.如果您希望在整个请求期间每次都返回相同的对象,则可以使用Mage::getSingleton().


Ala*_*orm 12

当你说

Mage::getModel('catalog/product');
Run Code Online (Sandbox Code Playgroud)

你在getModelMage类上调用静态方法

#File: app/Mage.php
public static function getModel($modelClass = '', $arguments = array())
{
    return self::getConfig()->getModelInstance($modelClass, $arguments);
}
Run Code Online (Sandbox Code Playgroud)

当你说

Mage::app->getModel('catalog/product');
Run Code Online (Sandbox Code Playgroud)

你会得到一个致命的错误,因为这是无效的PHP.

但是,如果你说

$app = Mage::app();
Run Code Online (Sandbox Code Playgroud)

你在类app上调用静态方法Mage

public static function app($code = '', $type = 'store', $options = array())
{
    if (null === self::$_app) {
        self::$_app = new Mage_Core_Model_App();
        self::setRoot();
        self::$_events = new Varien_Event_Collection();
        self::$_config = new Mage_Core_Model_Config();

        Varien_Profiler::start('self::app::init');
        self::$_app->init($code, $type, $options);
        Varien_Profiler::stop('self::app::init');
        self::$_app->loadAreaPart(Mage_Core_Model_App_Area::AREA_GLOBAL, Mage_Core_Model_App_Area::PART_EVENTS);
    }
    return self::$_app;
}
Run Code Online (Sandbox Code Playgroud)

它将返回一个Mage_Core_Model_App对象,它将允许您调用类/对象上的任何方法

app/code/core/Mage/Model/App.php
Run Code Online (Sandbox Code Playgroud)