Разница в том, что когда ваш модуль находится под Mage / Mymodule с коротким именем mymodule и вы вызываете Mage :: getModel (' Mymodule / mymodel') вы в конечном итоге попали в режим отступления.
Если распознаватель не находит запись для короткого имени Mymodule (чувствительно к регистру), то по умолчанию используется имя класса mage_mymodule_model_mymodel и поскольку ваш модуль находится подпространство имен Мага, которое работает.
Перемещая ваш модуль в специальное пространство имен компании, вы получаете имя класса, которое не работает, если оно попадает в резерв.Вам нужно mycompany_mymodule_model_mymodel и вместо этого получить mage_mymodule_model_mymodel .
Соответствующий код находится в Mage_Core_Model_Config :: getGroupedClassName ()
public function getGroupedClassName($groupType, $classId, $groupRootNode=null)
{
if (empty($groupRootNode)) {
$groupRootNode = 'global/'.$groupType.'s';
}
$classArr = explode('/', trim($classId));
$group = $classArr[0];
$class = !empty($classArr[1]) ? $classArr[1] : null;
if (isset($this->_classNameCache[$groupRootNode][$group][$class])) {
return $this->_classNameCache[$groupRootNode][$group][$class];
}
//$config = $this->getNode($groupRootNode.'/'.$group);
$config = $this->_xml->global->{$groupType.'s'}->{$group};
if (isset($config->rewrite->$class)) {
$className = (string)$config->rewrite->$class;
} else {
if (!empty($config)) {
$className = $config->getClassName();
}
if (empty($className)) {
$className = 'mage_'.$group.'_'.$groupType;
}
if (!empty($class)) {
$className .= '_'.$class;
}
$className = uc_words($className);
}
$this->_classNameCache[$groupRootNode][$group][$class] = $className;
return $className;
}
* NB : Magento вызывает uc_words для $ classname.
function uc_words($str, $destSep='_', $srcSep='_')
{
return str_replace(' ', $destSep, ucwords(str_replace($srcSep, ' ', $str)));
}