【发布时间】: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 的依赖注入以及为什么在我的情况下不起作用?
【问题讨论】: