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 上创建了一个问题:
在 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 路径。
更新:
流明版本: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 上创建了一个问题:
在 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 路径。