Heim  >  Artikel  >  Backend-Entwicklung  >  Analyse des Laravel5-Quellcodes (1)

Analyse des Laravel5-Quellcodes (1)

WBOY
WBOYOriginal
2016-08-08 09:25:151116Durchsuche

Laravel5-Quellcode-Analyse

autoload.php verwendet Composer-Autoload

Ich werde es hier nicht erklären

app.php startet das gesamte Projekt

Erster Blick auf die Anwendungsklasse

class Application extends Container implements ApplicationContract, HttpKernelInterface
Es gibt viele Methoden in Container, die ArrayAccess implementieren. Die Hauptmethoden werden zum Binden von Objekten verwendet (was die Wiederverwendung erleichtert).
ApplicationContract muss einen Registrierungsdienstanbieter implementieren.
HttpKernelInterface ist eine Handle-Methode, die eine Anfrage akzeptiert und eine Antwort zurückgibt.

Konstruktionsmethode der Anwendung

  • registerBaseBindings()
    Binden Sie das App-Objekt selbst an das Instanzeigenschaften-Array.

  • registerBaseServiceProviders()
    Registrieren Sie zwei Dienstanbieter, einer ist EventServiceProvider, registrieren Sie einen einzelnen Dispatcher mit dem Namen „events“ (TODO), der andere ist RoutingServiceProvider(), der Router, RouterGenerator, Redirector, ResponseFactory umfasst und ResponseFactory so konstruiert, dass er zwei Parameter akzeptiert, einen davon Es ist ViewFactory , und einer ist Redirecer

  • registerCoreContainerAliases(), der dem Alias-Attribut-Array
    'app' => ['IlluminateFoundationApplication', 'IlluminateContractsContainerContainer', 'IlluminateContractsFoundationApplication']
    eine Reihe von Schlüsseln und entsprechende Klassennamen und Schnittstellennamen hinzufügt „app“ ist der Schlüssel, und die drei im Array sind Aliase (Vermutung: Es wird geschätzt, dass bei jeder Verwendung von app?>make( Ichllum inateFoundationAnwendung),alleWirdZurückkehrenAntworten

    app['app'])

Nachdem Sie die App erstellt haben, beginnen Sie mit der Erstellung wichtiger Instanzen

  1. Teilen Sie einen AppHttpKernel-Singleton im App-Container. IlluminateFoundationHttpKernel Schauen Sie sich diese Klasse an. Sie erbt ein
    und implementiert die vier Methoden Bootstrap, Handle, Terminate und GetApplication. Wie Sie sich vorstellen können, besteht der Prozess darin, die ersten drei nacheinander auszuführen. was sehr vereinfacht ist. Das Array protected $bootstrappers
    enthält eine Reihe von Bootstrap-Startelementen. $app->singleton Sein __construct akzeptiert zwei Parameter, eine Anwendung und einen Router. Wir müssen uns noch einmal ansehen, wie
    es initialisiert. Enthält es bereits die IoC-Funktion? (TODO) protected $routeMiddleware Dabei wird davon ausgegangen, dass diese beiden Parameter korrekt übergeben wurden. Rufen Sie dann sofort die Middleware-Methode für den Router in

    auf. Die Middleware-Methode fügt lediglich den Schlüssel und den Klassennamen zum Middleware-Attribut-Array des Routers hinzu.

  2. Teilen Sie einen AppConsoleKernel-Singleton im App-Container. IlluminateFoundationConsoleKernal Geerbt von . Sein Konstruktor akzeptiert ein app, EinsDispatcherprotected $commandprotected function scheduleVeranstaltung. Und ein Planer ist so eingerichtet, dass er alle zwei Zeiträume Aufgaben ausführt.

    s-Attribute und -Methoden werden beide zum Überschreiben verwendet.
  3. 在app容器中共享一个App\Exceptions\Handler单例。
    继承自Illuminate\Foundation\Exceptions\Handler。他的构造方法接受一格Psr\Log\LoggerInterface

至此,app算是构造完成。接下来就要调用他的方法了。

调用Application

kernel=app->make(‘Illuminate\Contracts\Http\Kernel’);

response=kernel->handle(
$request = Illuminate\Http\Request::capture()
);

$response->send();

kernel?>terminate(request, $response);

这里的代码非常明确,首先make一个Kernal,之前已经将其绑定为singleton了。然后kernal handle一个request, 得到一个response, response调用send方法,最后kernal terminate。这里只是一个高纬度的概括,具体其中实现的方法,还需要进一步深入。

看到这里,我的感觉是,整个项目最重要的部分就是$app这个容器,或者说Container这个类,绑定的是什么(Closure),有哪些绑定方法,各个方法的作用是什么,make 和 build有什么区别,alias的作用是什么,等。了解了这些,对写框架会有帮助。

以上就介绍了Laravel5 源码解析 (一),包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Stellungnahme:
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