【问题标题】:Unresolvable dependency resolving [Parameter #0 [ <required> $app ]] in class Illuminate\Support\Manager类 Illuminate\Support\Manager 中无法解析的依赖解析 [Parameter #0 [ <required> $app ]]
【发布时间】:2019-05-25 18:07:39
【问题描述】:

我正在尝试以最小的方式实现没有模板的 Laravel。其实我想迁移一个非 Laravel 的项目,一步一步来。

require_once __dir__ . '/../vendor/autoload.php';

$app = new Application($_ENV['APP_BASE_PATH'] ?? dirname(__DIR__));

$app->singleton(
    Illuminate\Contracts\Http\Kernel::class,
    App\Kernel::class
);

$app->singleton(
    Illuminate\Contracts\Debug\ExceptionHandler::class,
    App\Exceptions\Handler::class
);

$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);

$request = \Illuminate\Http\Request::capture();
$app->instance('request', $request);

$app->bootstrapWith($this->bootstrappers);

$app->boot();

除了引导程序之外,一切正常:

\Illuminate\Foundation\Bootstrap\RegisterProviders::class,

这将加载Illuminate\Support\Manager。通过挖掘发现Manager的构造函数是:

public function __construct($app)
{
    $this->app = $app;
}

而 Laravel 无法解析 $app 的依赖关系。但是,如果我用以下方法修补这个构造函数,那么它就可以工作。

public function __construct(\Illuminate\Foundation\Application $app)

Laravel 如何解决 $app 的依赖注入以及为什么在我的情况下不起作用?

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    您在类的上下文之外使用$this-&gt;app。我很惊讶这不会引发错误。您复制的行位于您尝试在类上下文之外执行的 Kernel 类中

    【讨论】:

    • 哦!对不起,这是我的错误。我做了一些复制/粘贴来写这个问题。我修好了
    【解决方案2】:

    这是指这个 Laravel issue 这不是问题:)

    不要问我为什么,但您可能缺少以下提供者:

    Illuminate\Notifications\NotificationServiceProvider::class
    

    【讨论】:

    • 感谢 nowox,这不在升级指南中!
    【解决方案3】:

    我也有和你一样的方法。我排除了非默认包并升级并得到了同样的错误。

    你必须添加

    Illuminate\Notifications\NotificationServiceProvider::class

    给你的

    配置/app.php

    文件。 在我的情况下,这是有效的。

    【讨论】:

      猜你喜欢
      • 2021-06-12
      • 2019-04-23
      • 2014-07-30
      • 2022-01-25
      • 2019-08-23
      • 2021-07-21
      • 2018-05-11
      • 1970-01-01
      • 2015-12-25
      相关资源
      最近更新 更多