【问题标题】:Lumen 5.7.5 breaks Binding ResolutionLumen 5.7.5 打破了绑定分辨率
【发布时间】:2019-04-18 19:47:29
【问题描述】:

更新

See my answer

流明版本:5.7.5

PHP 版本:7.2

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

“目标 [Illuminate\Contracts\Debug\ExceptionHandler] 不可实例化。”

例子:

PHP 工匠

在 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

【问题讨论】:

    标签: php laravel ioc-container lumen


    【解决方案1】:

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

    它基本上归结为引导期间的路径覆盖。

    Lumen 中的 application.php 一直使用命令static: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);
    

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

    【讨论】:

      猜你喜欢
      • 2017-01-24
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 2016-04-18
      • 1970-01-01
      • 1970-01-01
      • 2016-12-05
      相关资源
      最近更新 更多