Magento'nun Fabrika Yöntemlerinde Tam Sınıf İsimleri


11

Magento 1'de, tam bir Magento sınıf adını bir fabrika yönteminde kullanırsam, bir nesneyi başlatabilirim

//trying full class name instead of catalog/product
$object = Mage::getModel('Mage_Catalog_Model_Product');

Ancak, aynı şey yardımcılar için işe yaramaz. Eğer denersen

Mage::helper('Mage_Core_Helper_Url');

Sen al

Warning: include(Mage/Mage/Core/Helper/Url/Helper/Data.php): failed to open stream: No such file or directory  in /path/to/magentolib/Varien/Autoload.php on line 93

#0 /path/to/magentolib/Varien/Autoload.php(93): mageCoreErrorHandler(2, 'include(Mage/Ma...', '/path/to/magent...', 93, Array)
#1 /path/to/magentolib/Varien/Autoload.php(93): Varien_Autoload::autoload()
#2 [internal function]: Varien_Autoload->autoload('Mage_Mage_Core_...')
#3 /path/to/magentoapp/Mage.php(547): spl_autoload_call('Mage_Mage_Core_...')
#4 /path/to/magentoapp/code/local/Sebastianjuffar/Commercebug/controllers/IndexController.php(11): Mage::helper('Mage_Core_Helpe...')
#5 /path/to/magentoapp/code/core/Mage/Core/Controller/Varien/Action.php(418): Sebastianjuffar_Commercebug_IndexController->indexAction()
#6 /path/to/magentoapp/code/core/Mage/Core/Controller/Varien/Router/Standard.php(250): Mage_Core_Controller_Varien_Action->dispatch('index')
#7 /path/to/magentoapp/code/core/Mage/Core/Controller/Varien/Front.php(172): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#8 /path/to/magentoapp/code/core/Mage/Core/Model/App.php(354): Mage_Core_Controller_Varien_Front->dispatch()
#9 /path/to/magentoapp/Mage.php(684): Mage_Core_Model_App->run(Array)
#10 /path/to/magentoindex.php(87): Mage::run('', 'store')
#11 {main}

Neler oluyor?


2
Bunu Twitter'dan aldın değil mi? :)
Marius

1
marius sen beni dövüyorsun. Heyecan-sorular-as-a-service.
philwinkle

@Marius Yeah - twitter ile ilgili sorularımı buraya gelmeye teşvik etmeye çalışıyorum.
Alan Storm

Yanıtlar:


8

Tamamen kodlayan bir bakış açısından, getModelClassNameyönteme bir göz atarsanız (birkaç kişi yığından aşağı çağırır Mage::getModel)

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

Magento /sınıf takma adında a görmüyorsa , bunun tam sınıf adı olduğunu varsayarsınız. Ancak, eğer getHelperClassNamefonksiyon

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

Magento /sınıf takma adında a görmüyorsa , kısa biçimini kullandığınızı varsayar.

Mage::helper('catalog')

ve datadiğer adın sonuna a ekler , böylece sınıf düzgün bir şekilde çözülür ( catalog/datato Mage_Catalog_Model_Data).

Bu, kısa form yardımcılarına olanak tanır, ancak Magento'nun kısa form yardımcı takma adı ile uzun form sınıfı adı arasındaki farkı anlatmasını imkansız hale getirir.

Bunun nihai "neden" muhtemelen sabitlemek zordur - tam sınıf adı örnekleme, böyle bir şekilde çalışıyor, bir geliştiricinin her bir modülün sahip olması için başka bir geliştiricinin arzusu ile uyumlu olmayan koruyucu kodlama uygulamalarının bir yan etkisi olabilir. bir "ana" yardımcı sınıf. Aynı zamanda çok hızlı çalışan tek bir geliştirici olabilir. Muhtemelen orada bir yerlerde proje yönetimi ve sistem geliştirme dersi var.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.