1

Magentoで独自のカスタムモジュールを作成していますが、Litespeedサーバー(PHP v5.2.14)Fatal Error: Call to a member function batch() on a non-object in ../../../BatchController.php on line 25でのテスト中に、別のLinuxサーバーとWampサーバー(PHP v5.2.11)でのテスト中に表示されなかったものが表示されます。

これは私を困惑させました。コード自体ではなく、サーバーの構成に関係していると思います。しかし、私はただ推測しています。私はここの誰かが私に言うことができることを望んでいました。

私が見ることができた唯一の本当の大きな違いは、phpのバージョンと環境を除いて、エラーが発生しているサーバーがSuhosinパッチを使用していることです。しかし、それはこれを引き起こす可能性があるものでしょうか?

問題の行はMage::getModel('mymodule/mymodel')->batch();、IFステートメントで囲まれています。batch()モデルファイルにあるパブリック関数です。

さらにコードが必要な場合はお知らせください。

ありがとう!

4

2 に答える 2

1

モデルの呼び出し時に「非オブジェクト」エラーが発生した場合は、Magentoがモデルクラスを取得しようとして問題が発生し、nullが返されます。この理由は必ずしも明らかではありません。これが通常のLAMPスタックで同じように機能した場合、問題はコードにない可能性があります。

私の最初の推測は、ファイルに適切な権限がないことです。それ以外の場合は、クラス名の解決に関係している可能性があります。次のようにプラグインを直接呼び出すことで、これを一時的にテストできます。

$obj = new Mynamespace_Mymodule_Model_Mymodel();
$obj->batch();

これが機能する場合、ファイルは読み取り可能であり、そのクラス名の解像度で洞窟探検をしたいと思うでしょう。それが機能しない場合は、自動ロードまたはクラスの宣言に問題があります。

お役に立てば幸いです。

ありがとう、ジョー

于 2011-01-16T16:35:59.660 に答える
1

それを分解します。

あなたは電話をかけようとしました

Mage::getModel('mymodule/mymodel')->batch();

PHPは、非オブジェクトでメソッドバッチを呼び出そうとしたと言っています。つまり、

Mage::getModel('mymodule/mymodel')

想定どおりにModelオブジェクトを返していません。

最初に行うことは、問題が発生しているサーバー上のMagentoキャッシュをクリアすることです。モジュールの構成がグローバル構成ツリーにロードされていない場合、MagentoはMage_Core_Model_Mymodelのインスタンス化を試み、失敗します。

2番目のステップは、モジュールのapp/etc/moduleファイルが適切に配置されていることを確認することです。

3番目のステップは、オブジェクトをインスタンス化するメソッドにデバッグ(1.4ブランチを想定)を追加し、Magentoがオブジェクトを作成できない理由を特定することです。

File:   app/code/core/Mage/Core/Model/Config.php
...
public function getModelInstance($modelClass='', $constructArguments=array())
{
    $className = $this->getModelClassName($modelClass);
    if (class_exists($className)) {
        Varien_Profiler::start('CORE::create_object_of::'.$className);
        $obj = new $className($constructArguments);
        Varien_Profiler::stop('CORE::create_object_of::'.$className);
        return $obj;
    } else {
        #throw Mage::exception('Mage_Core', Mage::helper('core')->__('Model class does not exist: %s.', $modelClass));
        return false;
    }
}
...    
于 2011-01-16T19:47:18.260 に答える