如何访问Laravel别名?

时间:2018-12-27 16:53:11

标签: php laravel

我正在从头开始构建一个小型应用程序,以了解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

1 个答案:

答案 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