現在、私の既存のプロジェクトをgithubから複製しようとしています。クローン後、プロセス中にcomposer install
を実行すると、次のエラーが表示されます。
Uncaught ReflectionException: Class log does not exist
Centos 7でLaravel 5.2を実行しています。
私は以下への参照を見てきました:
.env
ファイル内のスペースを削除します。私は持っています:
.env
をexample.env
に置き換えました。composer.json
を使用して、違いが生じるかどうかを確認しました。上記のどれも私に喜びをもたらしませんでした。また、別のマシンに同じ環境をセットアップし、アプリケーションが正常に動作するようにしました。ここでの唯一の違いは、マシン(作業)がgitから複製されていないことです。これは最初のビルド環境です。
私が受け取っているスタックトレース:
PHP Fatal error: Uncaught ReflectionException: Class log does not exist in /var/www/html/Acme/vendor/laravel/framework/src/Illuminate/Container/Container.php:736
Stack trace:
#0 /var/www/html/Acme/vendor/laravel/framework/src/Illuminate/Container/Container.php(736): ReflectionClass->__construct('log')
#1 /var/www/html/Acme/vendor/laravel/framework/src/Illuminate/Container/Container.php(631): Illuminate\Container\Container->build('log', Array)
#2 /var/www/html/Acme/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(674): Illuminate\Container\Container->make('log', Array)
#3 /var/www/html/Acme/vendor/laravel/framework/src/Illuminate/Container/Container.php(845): Illuminate\Foundation\Application->make('log')
#4 /var/www/html/Acme/vendor/laravel/framework/src/Illuminate/Container/Container.php(800): Illuminate\Container\Container->resolveClass(Object(ReflectionParameter))
#5 /var/www/html/Acme/vendor/laravel/framework/src/Illuminate/Container/Container.php(769): Illuminate\Container\Container->getDependenc in /var/www/html/Acme/vendor/laravel/framework/src/Illuminate/Container/Container.php on line 736
どんな助けでも大歓迎です。前もって感謝します。
さて、何時間も掘り進んだ後、私の問題の解決策が見つかりました。私が問題を言う理由は、Exception
が非常に誤解を招くためです。
Uncaught ReflectionException: Class log does not exist
この例外は、単にLaravelがエラーをログに記録しようとしたが、LaravelのLog
クラスをインスタンス化できなかったことを意味します。これは、Logクラスが歩き回ったり隠れたりするためではありません。これは、Laravelがまだブートプロセスを行っており、Log
クラスをまだロードしていないためです。
したがって、Laravelのブートサイクル中にエラーが発生したため、この例外がスローされます。このエラーが発生すると、例外をスローしようとしましたが、Log
クラスのために例外をスローできませんまだロードされています。したがって、ReflectionException
を取得する理由
このLaravelのすべてのバージョンで発生しました laravel 5.1 <=でスローされた例外を見た唯一の理由は、以前Laravelが問題を静かに破棄したためです&起動プロセスを通じて実行されます-基本的に、アプリはまだ壊れますが、Log class exception
を受信しません。
私の特定のケースでは、php-mysql
拡張機能がインストールされていなかったため、Laravelが起動プロセス中に破損していました。
最終的に、エラーが非常に誤解を招くために、間違ったことをデバッグするのは非常に困難です。
これが誰かの助けになることを願っています!
.envファイルで、値のスペースがないことを確認してください
たとえば、これは許可されています
DB_USERNAME=Homestead
これは許可されていません
DB_USERNAME=home stead
スペースがある場合は、値を引用符で囲むことができます。
DB_USERNAME="home stead"
彼らが.envファイルにjsonを使用することを本当に望んでいる場合は、その機能をリクエストする必要があります
根本的なエラーは、vendor/laravel/framework/src/Illuminate/Container/Container.php
を変更し、次を先頭に配置することで明らかになります。
<?php
namespace {
use Monolog\Logger as Monolog;
class log extends Illuminate\Log\Writer {
function __construct()
{
$this->monolog = new Monolog("local");
}
}
}
//Add curly-braces around the original content, like so:
namespace Illuminate\Container {
//All original code in this file goes here.
//...
}
( https://laracasts.com/discuss/channels/general-discussion/class-log-does-not-exist/replies/160902 へのクレジット)
このメッセージの根本原因のリストに追加するには、構成ファイルでクロージャーを定義するandその後php artisan config:cache
を呼び出すと、少なくともLaravel 5.1)。この症状の解決策: https://github.com/laravel/framework/issues/9625 ごとに、Laravel構成ファイルでクロージャーを定義しないでください。
ファイルbootstrap/cache/config.php
を削除します。このファイルはウィンドウに表示されない場合があります。その場合は、たとえばダブルコマンダーを使用します。間違いなく動作します!
編集:
.envファイルのキャッシュが原因である可能性があります。その場合は、bootstrap/cache/config.php
を削除してください。
.envファイルに数行を追加した後、同じ動作に気付きました。スペースは引用符なしでは許可されないため、次のように修正できます。
APP_YOUR_NAME="A value with some spaces"
私の場合、PDO拡張の欠落が問題でした。それをインストールした後、問題は修正されました。
編集::
VMがスムーズに実行されるようにするためのかなり不格好なデバッグやパスの再作成などに満足していなかったため、プロセスに反映し、浮浪者ボックスlaravel/Homestead(virtualbox 1.0.1
)を再インストールしました
私の場合、問題はconfig/app.php
のコンマの欠落に起因する可能性があります。コンマがないと、コンパイルプロセスが停止し、Uncaught ReflectionException: Class log does not exist
エラーが発生する可能性があります。
これは直接的な答えではありませんが、この沈黙のエラーの深intoに挑戦する人々へのガイド投稿としてより役立ちます
システム:macOS Sierra
Vagrant:1.9.1
(執筆時点の最新バージョン)
VM:laravel/Homestead(virtualbox 0.4.0
)
Laravelバージョン:5.1.*
PHP:7.0.*
以下を含む問題を解決するために繰り返し試みた後:
重大なことに、(私にとっては)初期セットアップのvirtualboxバージョンであるように見えました:
vagrant box add laravel/Homestead
代わりに、次のようにバージョン番号を指定してみてください。
vagrant box add laravel/Homestead
--box-version 0.4.0
その他:
次のlaravel/Homestead
virtualboxのバージョンで試みて失敗しました。
1.0.1
(デフォルト)およびlaravel/Homestead-7
:
0.2.1
また、これはconf /ディレクトリまたは。envファイルの一部のファイルで構文エラーが原因です。私の場合、サービスプロバイダーとファサードをconf/app.phpファイルのアレイプロバイダーとエイリアスに追加するときに、行末に::class
を置くのを忘れたため、このエラーが発生しました。これを修正し、エラーが消えました。
CLIでCMDを入力していたのに、誤ってアプリの構成ファイルに入力しました。問題を見つけるために、この手順に従う必要がありました。
解決策、問題を見つける方法:
https://laracasts.com/discuss/channels/general-discussion/class-log-does-not-exist?page=2
Uncaught ReflectionException: Class log does not exist
このエラーはlaravel 5.2&>バージョン:
私の間違いは:
Tips1:構成ファイルにコードの終わりがない(;)場合
その他の構文エラーこのエラーが発生します。
私のエラーコード:
<?php
return [
'data' => [
'common' => [
'AuthKey1' => "17086...........9a87a1",
'AuthKey2' => "17086...........9a87a1",
'AuthKey3' => "17043...........59969531",
],
]
]
正しいコード:Missing(;)End of return Array
<?php
return [
'data' => [
'common' => [
'AuthKey1' => "17086...........9a87a1",
'AuthKey2' => "17086...........9a87a1",
'AuthKey3' => "17043...........59969531",
],
]
];
このエラーは、構成ファイルのいずれかのエラーが原因である可能性があります。どのファイルが原因かを特定するには、/ vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/LoadConfiguration.phpの関数loadConfigurationFilesを次のように変更します。
protected function loadConfigurationFiles(Application $app, RepositoryContract $repository)
{
foreach ($this->getConfigurationFiles($app) as $key => $path) {
var_dump('loading key: ' . $key . ' -- path: ' . $path);
$repository->set($key, require $path);
}
}
Php artisanを実行し、最後に読み込んだ「キー」がエラーの原因となっている設定ファイルです。それを修正し、var_dumpコマンドを削除することを忘れないでください...幸運を祈ります。
この問題は通常、.envファイル内の単語間のスペースが原因で発生します。次のようなものがあるか確認してください
SITE_DESCRIPTION = Social Network for dogs
あなたはそれを置き換えます
SITE_DESCRIPTION = 'Social Network for dogs'
私の場合、マスターにブランチをマージした後、構成ファイル(config/app.php)にコンマがありません。
構文エラーでしたが、表示されませんでした。
私は同じ問題を抱えていましたが、ここでの解決策はどれもうまくいきませんでした
config
フォルダーに対するアクセス許可の拒否の例外があることがわかりました
許可を修正した後、すべてが機能しました!
それを把握する方法?
vendor/laravel/framework/src/illluminate/Foundation/Http/Kernel.php
にブレークポイントを置きます
ハンドル関数のキャッチ内の行101。
これが、拒否された許可について私が見つけた方法です。
php artisan config:cache
を実行すると解決しました。
または、ターミナル/ CMDにアクセスせずに共有ホスティングを使用している場合、これをRouts.php
ファイルに追加します。
Route::get('/config-cache', function() {
Artisan::call('config:cache');
return '<h1>Config cache cleared successfully</h1>';
});
次に、yourdomain.com/config-cache
に移動してこのスクリプトを実行します。
はい、@ jakehallasによると。例外で表示されているものとは関係ありません。
実際、dababaseの問題またはその他の構成変数の問題がある場合、これが原因です。
実際、database.phpで何かを変更しようとしたときに、database-copy.phpと同じファイルを複製しました。私はこれが問題を引き起こすことを実行しなかった。
このdatabase-copy.phpファイルを削除する前に私がやったことを行った後、正常に動作します..
ありがとう...
。env file(sublimeで.envを表示する。viエディターは.envファイルの最後にスペースを表示しないため、スペースを削除した後、この問題を解決した。)以下のコマンドを実行します。
コマンド:
php artisan config:clear
php artisan cache:clear
composer dump-autoload
php artisan clear-compiled
プロジェクトの依存関係を見逃したときのこのタイプのエラー。 Runphp composer.phar update
次のような負の値がありました
BUSINESS_RECONCILIATION_DAYS=-8
ラップする必要がありました
BUSINESS_RECONCILIATION_DAYS="-8"
ここや他の場所で提供されている多くのソリューションを試しました。私にはうまくいきませんでした。 /var/www/html/bootstrap/cache/compiled.phpを手動で削除し、オートロードファイルを更新することで解決しました。
rm /var/www/html/bootstrap/cache/compiled.php
composer dump-autoload
私の場合、設定ファイルでroute()
メソッドを使用していました。明らかに、これらのファイルはIlluminate Helperを使用しないため、このメソッドは機能しません。それらはデータを含む単純な.phpです。
構成ファイルは、Logクラスをインスタンス化する前に読み込まれます。これにより、 Jakehallas が非常にうまく説明されているというエラーが発生します。
オーケストラ/テストベンチについてはまだ誰も言及していないので、自分の問題に解決策を追加するだけだと思いました。
ユニットテストの1つでこのエラーが発生したときに、Laravelパッケージを作成していました。 orchestra/testbench
を使用して、コードのLaravel固有の部分のテストを有効にしました。
問題は、テストクラスがPHPUnit\Framework\TestCase
ではなくOrchestra\Testbench\TestCase
を拡張していることだけでした。