7

クラス名がSpace_Module_Model_LongModelNameあり、それを次のように参照したいとします。

Mage::getModel('module/longmodelname');

これは一部の開発環境では機能するようですが、すべての環境で機能するとは限りません。おそらく、ファイルシステムの大文字と小文字の区別の設定に関係しています。

それが機能しない環境で発生するエラーは、include()forSpace/Module/Model/Longmodelname.phpが失敗したことです。

4

4 に答える 4

17

config.xmlにglobal/models / yourpackageというconfig-nodeがあり、クラスモデルのプレフィックスを保存します。

Mage :: getModel('packagename / classname')を呼び出すと、Magentoはこの構成ノードをフェッチします。たとえば、Company_Yourmodule_Modelsは_を追加し、次に大文字の最初の文字でクラス名を追加します。

Company_Yourmodule_Models_Classname

cAMElcaSeクラス名がある場合も、同じ方法です。したがって、クラスの名前がClassNameであるとすると、Mage :: getModel('packagename / className')を呼び出す必要があり、magentoはそれをCompany_Yourmodule_Models_ClassNameに解決します。

于 2012-07-18T17:59:37.317 に答える
2

を構築するときにメソッドで使用されていることに気付くので、app/code/core/Mage/Core/Model/Config.php具体的に見てください。これは、クラス名文字列内の1つおきの単語を大文字にします。 getGroupedClassName();uc_words$className

したがって、のクラス名はインクルード用にLongModelNameなりLongmodelnameます。

これを簡単に拡張して、思いどおりに動作させることができますが、Magentoのファクトリー世代の主要な部分であるため、他のサードパーティモジュールを壊すことを恐れて触れず、キャメルケース以外の名前空間を使用します。

ImportExportが機能する理由は、それがモジュール名であり、クラス名ではないためです。私は以前に同じ問題に遭遇しましたが、それと同じくらい厄介なことに、クラス名をキャメルケース以外で保持する傾向があります。

于 2012-07-18T18:07:09.367 に答える
1

確かにキャメルケースを使用する可能性があります-MagentoコアのImportExportなどのモジュールを見ることができます。私はすべてがxmlsで正しい(キャメルケースで)名前を設定することだと思います

于 2012-07-18T17:44:54.293 に答える
0

4年後、別のメモ:

ファイル名に加えてキャメルケースクラス名を使用する場合は、{moduleName}/etc/config.xmlの次の部分もキャメルケースになっていることを確認してください。

`` `xml

<global>
    <models>
        <ProbablyYourCompanyOrModuleName>
            <ModuleName_resource>
                <entities>
                    <!-- "longModelName" below should be CamelCased, but prob the first letter will be lowercased -->
                    <longModelName>
                        <table>your_db_table_name</table>
                    </longModelName>
                </entities>
            </ModuleName_resource>
        </ProbablyYourCompanyOrModuleName>
    </models>
</global>

`` `

この部分は、最初の文字を小文字にしてキャメルケースに入れる必要があります。それ以外の場合は、例外が発生しますCan't retrieve entity config: yourmodule/longModelName

(を参照Mage_Core_Model_Resource::getTableName()

于 2016-11-10T19:41:59.910 に答える