Magento::register方法使用

在Mage类中使用$_registry存储生成的对象,这样生成的对象在全局都可以访问。Mage::register 函数有两种格式:

  • public static function register($key, $value, $graceful = false) 注册一个新的变量 (添加)
  •  public static function registry($key) 通过$key获取已有变量(获取)
  •  public static function unregister($key) 注销一个变量(删除)

Magento源文件:

/**
     * Register a new variable
     *
     * @param string $key
     * @param mixed $value
     * @param bool $graceful
     * @throws Mage_Core_Exception
     */
    public static function register($key, $value, $graceful = false)
    {
        if (isset(self::$_registry[$key])) {
            if ($graceful) {
                return;
            }
            self::throwException('Mage registry key "' . $key . '" already exists');
        }
        self::$_registry[$key] = $value;
    }

    /**
     * Unregister a variable from register by key
     *
     * @param string $key
     */
    public static function unregister($key)
    {
        if (isset(self::$_registry[$key])) {
            if (is_object(self::$_registry[$key]) && (method_exists(self::$_registry[$key], '__destruct'))) {
                self::$_registry[$key]->__destruct();
            }
            unset(self::$_registry[$key]);
        }
    }

    /**
     * Retrieve a value from registry by a key
     *
     * @param string $key
     * @return mixed
     */
    public static function registry($key)
    {
        if (isset(self::$_registry[$key])) {
            return self::$_registry[$key];
        }
        return null;
    }
代码位置截图
使用例子截图

总结:

  • 其实就是生成一个全局变量。不允许给变量的第二次赋值,只允许赋值一次。
  • 一般情况下,是在controller控制器下使用Mage::register()存储之后需要用 ,
  • Registry也非常方便SEO优化,例如,Mage::registry(‘current_category’),Mage::registry(‘current_product’),获得当前分类、产品的对象,便可更加精准添加各个页面的meta相关信息,对于各大搜索引擎、社交媒体分享有诸多的帮助 。

Leave a comment

您的电子邮箱地址不会被公开。 必填项已用 * 标注