Lumen 5.7.5 打破了绑定解析

Lumen 5.7.5 breaks Binding Resolution

更新:

流明版本:5.7.5

PHP版本:7.2

我刚刚完成了从 5.5 到 5.6 到 5.7 的升级,直到 5.7.4 一切都按预期工作,只要我引入 5.7.5。 PHP Artisan 给我

"Target [Illuminate\Contracts\Debug\ExceptionHandler] is not instantiable."

示例:

PHP artisan

在 Container.php 行 945:

目标 [Illuminate\Contracts\Debug\ExceptionHandler] 不可实例化。 重现步骤: 从 5.5 升级到 5.6 再到 5.7,最后从 5.7.4 升级到 5.7.5。

我正在检查所有代码更改以及可能导致此问题的原因。

也许你们有想法?

这是堆栈跟踪:

[2018-11-15 15:30:50] local.ERROR: Illuminate\Contracts\Container\BindingResolutionException: Target [Illuminate\Contracts\Debug\ExceptionHandler] is not instantiable. in /project/vendor/illuminate/container/Container.php:945
Stack trace:
0 project/vendor/illuminate/container/Container.php(785): Illuminate\Container\Container->notInstantiable('Illuminate\Cont...')
1 project/vendor/illuminate/container/Container.php(658): Illuminate\Container\Container->build('Illuminate\Cont...')
2 project/vendor/illuminate/container/Container.php(609): Illuminate\Container\Container->resolve('Illuminate\Cont...', Array)
3 project/vendor/laravel/lumen-framework/src/Application.php(260): Illuminate\Container\Container->make('Illuminate\Cont...', Array)
4 project/vendor/illuminate/container/Container.php(1222): Laravel\Lumen\Application->make('Illuminate\Cont...')
5 project/vendor/laravel/lumen-framework/src/Console/Kernel.php(223): Illuminate\Container\Container->offsetGet('Illuminate\Cont...')
#6 project/vendor/laravel/lumen-framework/src/Console/Kernel.php(117): Laravel\Lumen\Console\Kernel->reportException(Object(Illuminate\Contracts\Container\BindingResolutionException))
#7 project/artisan(43): Laravel\Lumen\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#8 {main} {"exception":"[object] (Illuminate\Contracts\Container\BindingResolutionException(code: 0): Target [Illuminate\Contracts\Debug\ExceptionHandler] is not instantiable. at project/vendor/illuminate/container/Container.php:945)
#[stacktrace]
#0 project/vendor/illuminate/container/Container.php(785): Illuminate\Container\Container->notInstantiable('Illuminate\\Cont...')
#1 project/vendor/illuminate/container/Container.php(658): Illuminate\Container\Container->build('Illuminate\\Cont...')
#2 project/vendor/illuminate/container/Container.php(609): Illuminate\Container\Container->resolve('Illuminate\\Cont...', Array)
#3 project/vendor/laravel/lumen-framework/src/Application.php(260): Illuminate\Container\Container->make('Illuminate\\Cont...', Array)
#4 project/vendor/illuminate/container/Container.php(1222): Laravel\Lumen\Application->make('Illuminate\\Cont...')
#5 project/vendor/laravel/lumen-framework/src/Console/Kernel.php(223): Illuminate\Container\Container->offsetGet('Illuminate\\Cont...')
#6 project/vendor/laravel/lumen-framework/src/Console/Kernel.php(117): Laravel\Lumen\Console\Kernel->reportException(Object(Illuminate\Contracts\Container\BindingResolutionException))
#7 project/artisan(43): Laravel\Lumen\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#8 {main}

因此我在 Github 上创建了一个问题:

https://github.com/laravel/lumen-framework/issues/849

在 Lumen V5.7.6 中发布了一个修复程序。

它基本上归结为引导过程中的路径覆盖。

Lumen中的application.php一直在使用命令static:class而不是class路径。

这已更改为 self:class 以反映正确的当前路径。

This is the commit that broke it

This is the commit that fixes it

在某些情况下,您可能希望覆盖基本应用程序路径,因此您可以在覆盖基本应用程序路径时添加别名,例如在 app.php 中引导应用程序时。

例如

$app->alias(overwrite\path\Application::class, \Laravel\Lumen\Application::class);

希望这对某人有所帮助,尽管新提交应该修复任何手动覆盖以反映正确的 class 路径。