web-dev-qa-db-ja.com

キャッチされないReflectionException:クラスログが存在しませんLaravel 5.2

現在、私の既存のプロジェクトをgithubから複製しようとしています。クローン後、プロセス中にcomposer installを実行すると、次のエラーが表示されます。

Uncaught ReflectionException: Class log does not exist

Centos 7でLaravel 5.2を実行しています。

私は以下への参照を見てきました:

  • .envファイル内のスペースを削除します。
  • ベンダーディレクトリを削除して再インストールする
  • Composer.jsonで必要な特定のパッケージを削除する

私は持っています:

  • カスタム構成エラーを回避するために、.envexample.envに置き換えました。
  • リポジトリを削除して再クローンしました。
  • Laravelに同梱されているデフォルトの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

どんな助けでも大歓迎です。前もって感謝します。

41
jakehallas

さて、何時間も掘り進んだ後、私の問題の解決策が見つかりました。私が問題を言う理由は、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が起動プ​​ロセス中に破損していました。

最終的に、エラーが非常に誤解を招くために、間違ったことをデバッグするのは非常に困難です。

これが誰かの助けになることを願っています!

51
jakehallas

.envファイルで、値のスペースがないことを確認してください

たとえば、これは許可されています

DB_USERNAME=Homestead

これは許可されていません

DB_USERNAME=home stead

スペースがある場合は、値を引用符で囲むことができます。

DB_USERNAME="home stead"

彼らが.envファイルにjsonを使用することを本当に望んでいる場合は、その機能をリクエストする必要があります

33
Richard Torcato

根本的なエラーは、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構成ファイルでクロージャーを定義しないでください。

21
Ben Johnson

ファイルbootstrap/cache/config.phpを削除します。このファイルはウィンドウに表示されない場合があります。その場合は、たとえばダブルコマンダーを使用します。間違いなく動作します!

編集:

.envファイルのキャッシュが原因である可能性があります。その場合は、bootstrap/cache/config.phpを削除してください。

10
Epsilon47

.envファイルに数行を追加した後、同じ動作に気付きました。スペースは引用符なしでは許可されないため、次のように修正できます。

APP_YOUR_NAME="A value with some spaces"

4
Ben

私の場合、PDO拡張の欠落が問題でした。それをインストールした後、問題は修正されました。

3
GarryOne

編集::

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.*


以下を含む問題を解決するために繰り返し試みた後:

  1. 書き換え、潜在的な解析の問題のための.envの削除
  2. php7.1およびmcrypt/mbstringの問題
  3. composer推奨パッケージのインストール
  4. homestead.rbの更新
  5. PATH関連の問題

重大なことに、(私にとっては)初期セットアップの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
3
jdkschang

また、これはconf /ディレクトリまたは。envファイルの一部のファイルで構文エラーが原因です。私の場合、サービスプロバイダーとファサードをconf/app.phpファイルのアレイプロバイダーとエイリアスに追加するときに、行末に::classを置くのを忘れたため、このエラーが発生しました。これを修正し、エラーが消えました。

2
MrMojoRisin

CLIでCMDを入力していたのに、誤ってアプリの構成ファイルに入力しました。問題を見つけるために、この手順に従う必要がありました。

解決策、問題を見つける方法:

  • configフォルダーのバックアップコピーを作成します。で1つの設定を削除してみてください
  • 時間をかけて、失敗したcomposer/artisanコマンドを実行してみてください。あなたが
  • 失敗したファイルを見つける-失敗する可能性のある行を検索します。
  • 失敗する理由は次のとおりです。ロードされていないクラス定数を使用している
  • まだ。まだロードされていないクラス/関数を使用します。等

https://laracasts.com/discuss/channels/general-discussion/class-log-does-not-exist?page=2

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",
    ],
]
];
1
venkatSkpi

このエラーは、構成ファイルのいずれかのエラーが原因である可能性があります。どのファイルが原因かを特定するには、/ 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コマンドを削除することを忘れないでください...幸運を祈ります。

1
Maxence Cupper

この問題は通常、.envファイル内の単語間のスペースが原因で発生します。次のようなものがあるか確認してください

SITE_DESCRIPTION = Social Network for dogs

あなたはそれを置き換えます

SITE_DESCRIPTION = 'Social Network for dogs'
1

私の場合、マスターにブランチをマージした後、構成ファイル(config/app.php)にコンマがありません。

my code snippet

構文エラーでしたが、表示されませんでした。

0
严水发

私は同じ問題を抱えていましたが、ここでの解決策はどれもうまくいきませんでした

configフォルダーに対するアクセス許可の拒否の例外があることがわかりました

許可を修正した後、すべてが機能しました!


それを把握する方法?

vendor/laravel/framework/src/illluminate/Foundation/Http/Kernel.phpにブレークポイントを置きます

ハンドル関数のキャッチ内の行101。

これが、拒否された許可について私が見つけた方法です。

0
Elad

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に移動してこのスクリプトを実行します。

0
Ido

はい、@ jakehallasによると。例外で表示されているものとは関係ありません。

実際、dababaseの問題またはその他の構成変数の問題がある場合、これが原因です。

実際、database.phpで何かを変更しようとしたときに、database-copy.phpと同じファイルを複製しました。私はこれが問題を引き起こすことを実行しなかった。

このdatabase-copy.phpファイルを削除する前に私がやったことを行った後、正常に動作します..

ありがとう...

0
user2215155

。env file(sublimeで.envを表示する。viエディターは.envファイルの最後にスペースを表示しないため、スペースを削除した後、この問題を解決した。)以下のコマンドを実行します。

コマンド:

php artisan config:clear
php artisan cache:clear
composer dump-autoload
php artisan clear-compiled
0
Muhammad Usama

プロジェクトの依存関係を見逃したときのこのタイプのエラー。 Runphp composer.phar update

0
Nimmi Verma

次のような負の値がありました

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
0
Jievie

私の場合、設定ファイルでroute()メソッドを使用していました。明らかに、これらのファイルはIlluminate Helperを使用しないため、このメソッドは機能しません。それらはデータを含む単純な.phpです。

構成ファイルは、Logクラスをインスタンス化する前に読み込まれます。これにより、 Jakehallas が非常にうまく説明されているというエラーが発生します。

0
adriaroca

オーケストラ/テストベンチについてはまだ誰も言及していないので、自分の問題に解決策を追加するだけだと思いました。

ユニットテストの1つでこのエラーが発生したときに、Laravelパッケージを作成していました。 orchestra/testbenchを使用して、コードのLaravel固有の部分のテストを有効にしました。

問題は、テストクラスがPHPUnit\Framework\TestCaseではなくOrchestra\Testbench\TestCaseを拡張していることだけでした。

0
Lars Nyström