В этом коде что означает этот параметр клиента


В этом коде, что означает этот клиент параметр

$this->helper('customer')->getRegisterPostUrl();
Author: Vaibhav Ahalpara, 2014-12-11

3 answers

Сначала я хочу сказать, что у вас много вопросов о том, как работает Magento. Мне нравится этот дух.

Метод helper(), который вы вызываете изнутри блока, то есть такой же, как вызов Mage::helper(), является фабрикой.
Он возвращает вам экземпляр класса. Помощник в этом деле.

Метод Mage::helper выглядит следующим образом:

public static function helper($name)
{
    $registryKey = '_helper/' . $name;
    if (!self::registry($registryKey)) {
        $helperClass = self::getConfig()->getHelperClassName($name);
        self::register($registryKey, new $helperClass);
    }
    return self::registry($registryKey);
}

Это означает, что экземпляр класса, который вы получите, будет одноэлементным. Каждый раз вы будете получать один и тот же экземпляр класса.

Это метод получает параметр $name. На основе этого имени Magento определяет класс, который нуждается в установке. $helperClass = self::getConfig()->getHelperClassName($name);

Если вы углубитесь в метод Mage_Core_Model_Config::getHelperClassName, вы увидите следующее:

public function getHelperClassName($helperName)
{
    if (strpos($helperName, '/') === false) {
        $helperName .= '/data';
    }
    return $this->getGroupedClassName('helper', $helperName);
}

Это означает, что если параметр не содержит косой черты, то к параметру будет добавлено /data.
таким образом, $this->helper('customer') - это то же самое, что $this->helper('customer/data').

Если вы посмотрите дальше в методе getGroupedClassName...вы, вероятно, заблудитесь:). Я знаю, что сначала так и было.

Но я объясню немного о том, как это работает.
В config.xml модуля, который у вас есть под тегом <global>, определения моделей, блоков и помощников. вот так

<helpers>
    <module_alias>
        <class>Namespace_Module_Helper</class>
    </module_alias>
</helpers>

При получении параметра, подобного customer/data, magento ищет узел класса: конфигурация->глобальный->помощники->клиент->класс.
В этом случае это будет Mage_Customer_Helper и добавляет к нему то, что находится после косой черты в первой форме uc. В этом случае Data.
Таким образом, имя класса Mage_Customer_Helper_Data.
Этот класс создается, и экземпляр возвращенный.

 6
Author: Marius, 2014-12-11 13:45:00

Это псевдоним для используемого вспомогательного класса, этот псевдоним используется для создания класса, загружаемого для выполнения указанной функции.

В этом случае псевдоним помощника для клиента сопоставляется с Mage_Customer_Helper. Поскольку указан только псевдоним класса, функция getHelperClassName добавит /данные для загрузки вспомогательного класса по умолчанию с именем: Mage_Customer_Helper_Data, затем загрузчик загрузит файл Mage/Customer/Helper/Data.php.

 3
Author: Vladimir Kerkhoff, 2014-12-11 13:41:56

В шаблонах $this->helper() переводится в Mage::helper()

Таким образом, этот код означает, что это вызов Mage::helper('customer'), который переводится в Mage_Customer_Helper_Data (или любой класс, который его переписывает) в бэкэнде.

Если вам интересно, как это делается, взгляните на Mage_Core_Model_Config::getHelperClassName()

 3
Author: Luke Rodgers, 2018-03-13 18:53:51