【问题标题】:Laravel / Lumen - Reflection Exception Class does not existLaravel / Lumen - 反射异常类不存在
【发布时间】:2017-08-16 09:09:21
【问题描述】:

我正在尝试将 Manager 类注入 Lumen 的脚趾服务容器。我的目标是拥有LogManager 的单个实例,可通过app(LogManager::class) 在整个应用程序中使用。

每次我尝试访问此快捷方式时,我都会收到以下异常:

[2017-03-23 16:42:51] lumen.ERROR: ReflectionException: Class LogManager does not 
exist in /vendor/illuminate/container/Container.php:681

LogManager.php(我将该类放在我的模型所在的同一位置(app/LogManager.php))

<?php

namespace App;

use App\LogEntry;

class LogManager
{
...
}   

AppServiceProvider.php

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\LogManager;

class AppServiceProvider extends ServiceProvider
{
/**
 * Register any application services.
 *
 * @return void
 */
public function register()
{
    $this->app->singleton(LogManager::class, function ($app) {
        return new LogManager();
    });
}
}

我在bootstrap/app.php 中取消了$app-&gt;register(App\Providers\AppServiceProvider::class); 行的注释

我认为我错过了正确的命名空间或类的放置,尤其是 LogManager。也许有人愿意给我一个提示?

如果您需要更多信息,请给我提示!

【问题讨论】:

  • 我经常遇到同样的问题。每次在 config/*.php 或 .env 文件中都会出现一些语法错误。
  • 在尝试为容器中的给定抽象获取具体类型时,可能会出现问题。您在哪里以及如何从容器中解析 LogManager?

标签: php laravel ioc-container lumen


【解决方案1】:

您的班级和您的服务提供商看起来不错。但是,无论您在哪里调用 app(LogManager::class),也需要知道该类的完全限定名。

要么确保文件顶部有use App\LogManager,要么将呼叫更改为app(\App\LogManager::class)

【讨论】:

  • 除了设置一个完整的命名空间他还可以注册为LogManager:$this-&gt;app-&gt;singleton('LogManager', function ($app) { return new \App\LogManager; });
  • @MelvinKoopmans 虽然从技术上讲这可以解决当前的问题,但这会破坏使用正确的完全限定名称将类从容器中解析出来的任何现有代码。此外,这将消除通过类型提示自动注入此依赖项的能力。
猜你喜欢
  • 1970-01-01
  • 2019-05-26
  • 2016-12-07
  • 2019-05-11
  • 2018-04-22
  • 2018-04-15
  • 2015-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多