我正在从头开始构建一个小型应用程序,以了解Laravel的工作方式,而我不了解aliases
的工作方式。
我的index.php
当前非常简单:
$app = new Illuminate\Foundation\Application(dirname(__DIR__));
dd($app);
现在,我想访问一个别名,例如request
,所以我添加了:
dd(app('request'));
但是我收到一个错误,找不到请求:
Illuminate/Container/Container.php(780): ReflectionClass->__construct('request')
但是我在Illuminate\Foundation\Application@registerCoreContainerAliases
中发现request
应该被加载。
我想念什么?
我也尝试这样做:
$request = Illuminate\Http\Request::capture();
$app->instance('request', $request);
dd($app->isAlias('request'));
然后我得到false
。
答案 0 :(得分:1)
如果您创建自己的应用程序实例,则需要将其设置为默认容器:
Container::setInstance(new Illuminate\Foundation\Application(dirname(__DIR__)));
这样,只要您使用app(..)
,就可以访问新实例的绑定和别名。但是,别名的工作方式与您所测试的相反。
例如:
app()->isAlias('request'); // false
app()->isAlias(\Illuminate\Http\Request::class); // true
app()->getAlias(\Illuminate\Http\Request::class); // "request"
请注意,只有在调用$kernel->handle
之前,才会初始化实际的请求,因此,在框架积极处理请求之前,app('request')
不会起作用。
创建应用程序的样板代码位于app.php处的index.php
请求实例设置在Kernel.php
中