代码之家  ›  专栏  ›  技术社区  ›  nowox

如何访问Laravel别名?

  •  0
  • nowox  · 技术社区  · 6 年前

    我正在从头开始构建一个小应用程序,以了解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 = Illuminate\Http\Request::capture();
    $app->instance('request', $request);
    dd($app->isAlias('request'));
    

    我得到 false .

    1 回复  |  直到 6 年前
        1
  •  1
  •   apokryfos    6 年前

    如果您创建自己的应用程序实例,则需要将其设置为默认容器:

     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