2

Magentoモジュール内でブロックを読み込もうとしたときに、予期しない問題が見つかりました。ブロック名は*Mycompany_CustomerModule_Block_CustomerModuleDashboardDataBlock*でした(はい、名前は非常に長いですが、dashboard.htmlとMagento Coreで使用されるものとの混同を避けるために、モジュールに関連するすべてのブロックにモジュール名を追加しました)。問題は、そのようなブロックをロードしようとすると、次のコマンドを使用することです。

$this->getLayout()->createBlock('customermodule/customermoduledashboarddatablock')

Magentoは「無効なブロックタイプ」という例外を発生させます。完全に機能するブロックからファイル全体をコピーしたため、何が問題なのか理解できませんでした。次に、ブロックの名前を、DashboardDataBlockなどの短い名前に変更してみました。短い名前の場合、ブロックは正しくロードされます。

したがって、私の質問は、クラスの名前の長さに制限はありますか?クラス名はいつでも短縮できますが、今後同様の問題が発生しないように、制限があるかどうかを知りたいと思います。ありがとう。

4

2 に答える 2

2

問題は、ファイルシステムの大文字と小文字の区別に関係なく、Magentoクラス名の最後の部分をキャメルケースにしないことです。

  • MyNamespace_MyModule_MyClassName いいえ
  • MyNamespace_MyModule_myclassname いいえ
  • MyNamespace_MyModule_myclassName いいえ
  • MyNamespace_MyModule_Myclassname はい
  • MyNamespace_MyModule_My_Class_Name はい

コアモジュールでもこの​​パターンに気付くでしょう。名前空間とモジュールのクラスプレフィックスは構成ファイルから読み取られ、任意の大文字を含めることができます。ただし、実際のクラス名は、大文字を使用できない方法でクラスエイリアスから派生しています(Mage_Core_Model_Config::getGroupedClassname()知りたい場合は、コードを参照してください。理由。ヒント:使用しますuc_words

于 2013-02-21T10:19:17.517 に答える
1

ここでは、いくつかのことが行われている可能性があります。大文字と小文字を区別するファイルシステムを使用している場合、問題は、ファイル名とクラスID(customermoduledashboarddatablockこの場合)の間でcamelCasingを一致させる必要があることです。ただし、オートローダーによって解決されるフォルダーまたはファイルの最初の文字に注意してください。クラスプレフィックスまたはクラスIDに関係なく、大文字にする必要があります。さらに、PHPはクラス名とメソッド呼び出しの大文字と小文字を区別しないことに注意してください。オートローダーのみが処理し、大文字と小文字が区別されるファイルシステムのみを処理します。

その他の考えられる問題は、Windows環境でのファイル名の合計の長さである可能性があります。

于 2012-07-27T04:13:37.337 に答える