ホームページ >バックエンド開発 >PHPチュートリアル >Laravel5のソースコード解析(1)
Laravel5のソースコード解析
autoload.phpはcomposerのautoloadを使用します
ここでは説明しません
app.phpプロジェクト全体を開始します
まずはApplicationクラスを見てみましょう
class Application extends Container implements ApplicationContract, HttpKernelInterface
Container には ArrayAccess を実装するメソッドが多数あり、主なメソッドはオブジェクトをバインドする (再利用を容易にする) ために使用されます。
ApplicationContract は登録サービス プロバイダーを実装する必要があります。
HttpKernelInterface は、リクエストを受け取り、レスポンスを返すハンドル メソッドです。
registerBaseBindings()
アプリ オブジェクト自体をインスタンス プロパティ配列にバインドします。
registerBaseServiceProviders()
2 つのサービス プロバイダーを登録します。1 つは EventServiceProvider で、「events」(TODO) という名前の単一の Dispatcher を登録します。もう 1 つは RoutingServiceProvider() です。これには Router、RouterGenerator、Redirector、ResponseFactory が含まれ、2 つのパラメーターを受け入れるために ResponseFactory を構築します。1 つは ViewFactory です。 、もう 1 つは Redircer
registerCoreContainerAliases() で、一連のキーと対応するクラス名とインターフェイス名をエイリアス属性配列に追加します'app' => ['IlluminateFoundationApplication', 'IlluminateContractsContainerContainer', 'IlluminateContractsFoundationApplication']
「app」がキーで、配列内の 3 つはエイリアスです (推測: akIlluminateFoundationHttpKernel
を継承しており、bootstrap、handle、terminate、getApplication の 4 つのメソッドを実装しています。リクエストを受信すると、プロセスが実行されます。最初の 3 つは非常に単純化されています。 protected $bootstrappers
配列には、一連のブートストラップ スタートアップ プロジェクトが含まれています。 IlluminateFoundationConsoleKernal
から継承されます。彼のコンストラクターは
aIlluminateFoundationHttpKernel
,实现了bootstrap, handle, terminate, getApplication这四个方法,可以想象,当收到request时候,流程就是前三个依次执行,非常简化。 protected $bootstrappers
p$app->singleton
pprotected $routeMiddleware
IlluminateFoundationConsoleKernal
。他的构造方法接受一个protected $command
s属性和protected function schedule
protected $command
の属性と protected function schedule
メソッドは両方ともオーバーライドに使用されます。 🎜在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教程有兴趣的朋友有所帮助。