我是Lumen和Laravel的新手,但我必须使用Lumen编写REST API。我已经设置了 Controller ,但使用记录仪时遇到了问题。
我遵循了文档:Lumen docs

这是我的 Controller 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');

关于官方文档中所描述的facade方法为何不起作用的任何想法?

最佳答案

Doh当然,在发布此问题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()调用。

我对此未发表评论,现在可以使用了。

10-04 17:46