6

Lumen と Laravel は初めてですが、Lumen を使用して REST API を作成する必要があります。コントローラーをセットアップしましたが、ロガーの使用に問題があります。ドキュメントに従っています:Lumen docs

これは私のコントローラー app/Http/Controllers/DocumentsController.php です:

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Log;

class DocumentsController extends Controller
{
    public function index()
    {
        Log::info('test');
        return response()->json(['result' => 'Oh hey!']);
    }
}

これを実行すると、次のようなエラーが表示されます。

DocumentsController.php 行 22 の FatalErrorException: クラス 'Log' が見つかりません

そのため、Log ファサードに何か問題があるようです (Laravel/Lumen でそれらがどのように機能するかはまだよくわかりません)。

しかし、Log::info() 呼び出しを変更して、ログ サービスを DI コンテナーから手動でプルすると、次のように動作します。

    $app = app();
    $app->make('log')->info('test');

公式ドキュメントに記載されているファサードメソッドが機能しない理由について何か考えはありますか?

4

1 に答える 1

15

もちろん、この質問を投稿してから5分後、私はそれを理解しました. Application 基本クラス (vendor/laravel/lumen-framework/src/Application.php) に次のエイリアスがあることに気付きました。

public function withFacades()
{
    Facade::setFacadeApplication($this);

    if (! static::$aliasesRegistered) {
        static::$aliasesRegistered = true;

        class_alias('Illuminate\Support\Facades\Auth', 'Auth');
        class_alias('Illuminate\Support\Facades\Cache', 'Cache');
        class_alias('Illuminate\Support\Facades\DB', 'DB');
        class_alias('Illuminate\Support\Facades\Event', 'Event');
        class_alias('Illuminate\Support\Facades\Gate', 'Gate');
        class_alias('Illuminate\Support\Facades\Log', 'Log');
        class_alias('Illuminate\Support\Facades\Queue', 'Queue');
        class_alias('Illuminate\Support\Facades\Schema', 'Schema');
        class_alias('Illuminate\Support\Facades\URL', 'URL');
        class_alias('Illuminate\Support\Facades\Validator', 'Validator');
    }
}

ただし、bootstrap/app.php では $this->withFacades() 呼び出しがデフォルトでコメントアウトされているため、このメソッドは呼び出されませんでした。

コメントを外したところ、動作するようになりました。

于 2016-06-11T02:18:23.020 に答える