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.
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
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
Teilen Sie einen AppConsoleKernel-Singleton im App-Container. IlluminateFoundationConsoleKernal
Geerbt von . Sein Konstruktor akzeptiert ein protected $command
protected function schedule
Veranstaltung. Und ein Planer ist so eingerichtet, dass er alle zwei Zeiträume Aufgaben ausführt.
在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教程有兴趣的朋友有所帮助。