0

artisan コマンドを実行するたびに、次のエラー メッセージが表示されます。

{"error":{"type":"ReflectionException","message":"Class OrdersModel does not exist","file":"\/home\/vagrant\/Omono\/vendor\/laravel\/framework\/src\/Illuminate\/Container\/Container.php","line":552}}

これは私のvagrantテストサーバーでのみ発生し、本番環境では発生しません. 走ってみました

composer dump-autoload

など。composer.json をチェックインしたところ、models フォルダーがそこに含まれています。vendor/composer/autoload_classmap.php もチェックインしましたが、マッピングが含まれています。

'OrdersModel' => $baseDir . '/app/models/Orders.php',

この問題を修正するために他に何を試すべきかわかりません。

編集: OrdersModel または実際の larvel アプリの他のクラスには問題がないことに注意してください。

EDIT2 (重要??):したがって、トレースステートメントを追加するという骨の折れる作業により、詳細が機能しないように思われるため、問題はサービスプロバイダーの作成時にあり、アプリで「シングルトン」を作成することに帰着することがわかりました. 私はこのコードを書きませんでしたが、インターフェイス (OrderRepositoryInterface) とそれにマップする実装 (DbOrderRepository) があるようです。ファイルは次のように始まります

<?php namespace Omono\Repositories;

use OrdersModel as Order;

なんらかの理由で、これは OrderModels を探す場所であり、見つけることができません。実際の Web アプリでは、このモジュールに問題はなかったと確信しています。したがって、何らかの理由で、このフォルダーに OrdersModel が見つからず、artisan を実行している場合のみです。

EDIT3:

php -v は以下を与えます:

PHP Warning:  Module 'mongo' already loaded in Unknown on line 0
PHP 5.5.12-2+deb.sury.org~trusty+1 (cli) (built: May 12 2014 13:48:43) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
    with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies
    with Xdebug v2.2.5, Copyright (c) 2002-2014, by Derick Rethans

また、Web サイトにアクセスするとすべてが正常に動作することも指摘しておく必要があります。OrdersModel は何の問題もなくすべきことを行い、エラーは発生しません。これは artisan コマンドの実行時にのみ発生します。おそらく無関係ですが、vagrant テストサーバー (問題のあるサーバー) を更新するたびに、いくつかのクラスを機能させるために composer dumpautoload を実行する必要があります。

4

1 に答える 1

0

わかりましたので、たくさん遊んだ後、私はこれを解決することができました。これは非常に具体的な問題ですが、誰かがこの質問を見つけた場合に備えて、回答を投稿します。

そのため、編集 2 に続いて、このクラスを参照する serviceprovider の行をコメントアウトすることにしました...指が交差しました...うまくいきました。すこし。行 use Log; が原因で、実際にはエラーが発生しました。私のコードで。面白い。それを取り除きましょう。できます。だから私は自分のクラスのコメントを外し、クラスで私もログを使用していることに気づきました。この場合、デフォルトの名前空間にないため、これは正しいのですが、実際には Log をどこでも呼び出していなかったので、一体、それを削除した方がよいかもしれません。サイコロはありません。次に、このクラスとほぼ同じクラスの間をフリックします。私は気づきました

use MyApp\Repositories\OrderRepositoryInterface;

ちょっと待って。これは必要ありません。これは同じ名前空間にあるためです。その行を削除しました。低いと見よ、すべてが修正されています。

概要; うーん...わかりません。エラーメッセージがこれをどのように意味するのかはまったくわかりませんが、基本的にはサービスプロバイダーでこれらのようなことを確認してください. また、多くの人が の代わりに を使用したために問題を抱えていると読んだことがあります。

于 2015-01-11T10:47:28.037 に答える