2011-08-05 10 views
2

私は奇妙な動作を見出し、誰かが答えを知っていれば助けが必要です。私はアプリ/コード内のモジュールのmymoduleを持っている場合はMagentoコード/ローカルケースの感度

行動は、(モデルに、mymodelとローカル/メイジ/

アプリ/コード/ローカル/メイジとアプリ/コード/ローカル/ MyCompanyの(または何でも)との間で異なっているようですアプリ/コード/ローカル/メイジ/ MyModuleという/モデル/ mymodelという)私はそれを読み込むことができます。

メイジ:: getModel( '* ymodule/mymodelという* M')またはメイジ:: getModel( '* メートル * ymodule/Mymodel ')は両方とも動作しています...

しかし、モジュールがapp/code/local/Mycompanyにある場合大文字と小文字が区別され、一方のみが動作する、config.xmlに依存

<model> 
      <**m**ymodule&gt; 
       <class>Mycompany_Mymodule_Model</class> 
       <resourceModel>cybermut_mysql4</resourceModel> 
      </**m**ymodule> 
</models> 

意志がメイジ:: getModel( '* メートル * ymodule /に、mymodel')

<models> 
      <**M**ymodule&gt; 
       <class>Mycompany_Mymodule_Model</class> 
       <resourceModel>cybermut_mysql4</resourceModel> 
      </**M**ymodule> 
</models> 
可能

はMage :: getModel( '* M * ymodule/Mymodel')を許可します

なぜこの違いがありますかローカル/メイジとローカル/ Alltheothersとの間の動作?

PS:それは家に作られたモジュールの書き換えていないと私は1.4.2 よろしく

答えて

2

差があるCEを使用していること、あなたのモジュールは、の短縮名で魔道士/ の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を呼び出します。

function uc_words($str, $destSep='_', $srcSep='_') 
{ 
    return str_replace(' ', $destSep, ucwords(str_replace($srcSep, ' ', $str))); 
} 
関連する問題