Heim > PHP-Framework > Laravel > Ein Artikel, der die Instanziierung des Laravel-Kernels erklärt

Ein Artikel, der die Instanziierung des Laravel-Kernels erklärt

藏色散人
Freigeben: 2021-09-06 09:07:29
nach vorne
1572 Leute haben es durchsucht

Die folgende Tutorial-Kolumne von Laravel stellt Ihnen die Laravel-Kernel-Instanziierung F vor. Ich hoffe, dass sie Freunden, die sie benötigen, hilfreich sein wird!

Laravel-Kernel-Instanziierung

$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
Nach dem Login kopieren

Instantiierungskernel

Bei der Instanziierung der Anwendung wurden viele grundlegende Vorgänge initialisiert, sodass die folgende Konstruktionsmethode direkt die Abhängigkeitsinjektion des Service-Containers verwendet, um die Klassenproblemabhängigkeiten zwischen zu lösen .

// \Illuminate\Contracts\Http\Kernel 类构造器依赖 \Illuminate\Contracts\Foundation\Application 和 \Illuminate\Routing\Router,将会通过服务容器来处理依赖关系
public function __construct(Application $app, Router $router)
{
    $this->app = $app;

    // 主要委托 $router 来处理
    $this->router = $router;
    // 以下均为中间件的设置
    $router->middlewarePriority = $this->middlewarePriority;

    foreach ($this->middlewareGroups as $key => $middleware) {
        $router->middlewareGroup($key, $middleware);
    }

    foreach ($this->routeMiddleware as $key => $middleware) {
        $router->aliasMiddleware($key, $middleware);
    }
}

\Illuminate\Contracts\Foundation\Application 的处理:
make 时通过别名方式直接调用 $this->instances['app']

\Illuminate\Routing\Router 的处理:
make 时通过别名方式直接调用 $this->bindings['router'] 数组里面 concrete 对应的匿名函数
Router 依赖 \Illuminate\Contracts\Events\Dispatcher 和 \Illuminate\Container\Container
public function __construct(Dispatcher $events, Container $container = null)
{
    $this->events = $events;
    $this->routes = new RouteCollection;
    $this->container = $container ?: new Container;
}

\Illuminate\Contracts\Events\Dispatcher 的处理:
make 时通过别名方式直接调用 $this->bindings['events'] 数组里面 concrete 对应的匿名函数
Dispatcher 依赖 \Illuminate\Contracts\Container\Container
public function __construct(ContainerContract $container = null)
{
    $this->container = $container ?: new Container;
}

\Illuminate\Container\Container 的处理:
make 时直接调用 $this->instances['Illuminate\Container\Container'] = Object(app)
\Illuminate\Contracts\Container\Container 的处理:
make 时调用别名直接调用 $this->instances['app'] = Object(app)
上面两个一样,没有区别
Nach dem Login kopieren

Hinweis: Die oben aufgeführten Abhängigkeiten werden alle direkt dem Service-Container zur automatischen Verarbeitung anvertraut. Es besteht kein Grund zur Angst

vor $this->bindings['router'] und $this-> bindings['events'] behandelt Bindungsereignisse. Die anonyme Funktion, die dem Array-Schlüssel konkret entspricht, wird während der Erstellung direkt aufgerufen.

Der während make verwendete Codeausschnitt

##############################################
if ($concrete instanceof Closure) {            
    return $concrete($this, end($this->with)); 
}
###############################################

$this->bindings['router'] = [
        'concrete' => function ($app) {
                            return new Router($app['events'], $app);
                        },
        'shared' => 'true',
    ];
$router = new Router($app['events'], $app);

\Illuminate\Routing\Router
public function __construct(Dispatcher $events, Container $container = null)
{
    $this->events = $events;
    $this->routes = new RouteCollection;
    $this->container = $container ?: new Container;
}
Nach dem Login kopieren

gibt ein Router-Objekt zurück und setzt gleichzeitig $this->instances['router'] = $router-Objekt für den nächsten direkten Aufruf zurück.

$this->bindings['events'] = [
    'concrete' => function ($app) {
            return (new Dispatcher($app))->setQueueResolver(function () use ($app) {
                return $app->make(QueueFactoryContract::class);
            });
            }
    'shared' => 'true',
];

$dispatcher = (new \Illuminate\Events\Dispatcher($app))->setQueueResolver(function () use ($app) {
                return $app->make(QueueFactoryContract::class);
            });

Illuminate\Events\Dispatcher:
public function __construct(ContainerContract $container = null)
{
    $this->container = $container ?: new Container;
}
public function setQueueResolver(callable $resolver)
{
    $this->queueResolver = $resolver;

    return $this;
}
Nach dem Login kopieren

Gibt ein Dispatcher-Objekt zurück und setzt das $this->instances['events'] = $dispatcher-Objekt für den nächsten direkten Aufruf zurück.

Hinweis:
Das Kernelobjekt ist ein Objekt, das Anwendung und Routing kombiniert, und das Routing injiziert das IlluminateEventsDispatcher-Objekt, das das Kernobjekt ist.

Verwandte Empfehlungen: Die neuesten fünf Laravel-Video-Tutorials

Das obige ist der detaillierte Inhalt vonEin Artikel, der die Instanziierung des Laravel-Kernels erklärt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage