ホームページ  >  記事  >  バックエンド開発  >  Laravel5のソースコード解析(1)

Laravel5のソースコード解析(1)

WBOY
WBOYオリジナル
2016-08-08 09:25:151094ブラウズ

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 つはエイリアスです (推測: ake('Il lumin a te財団アプリケーション )すべて ウィル戻る戻る app['app'])構築後開始アプリ アプリコンテナ内で AppHttpKernel シングルトンを共有するための重要なインスタンスを作成します。 このクラスを見てみましょう。このクラスは IlluminateFoundationHttpKernel を継承しており、bootstrap、handle、terminate、getApplication の 4 つのメソッドを実装しています。リクエストを受信すると、プロセスが実行されます。最初の 3 つは非常に単純化されています。 protected $bootstrappers 配列には、一連のブートストラップ スタートアップ プロジェクトが含まれています。 彼の __construct は、Application と Router の 2 つのパラメータを受け入れます。 がそれを初期化する方法をもう一度確認する必要があります。IoC 関数はすでに含まれていますか? (トド) ここでは、これら 2 つのパラメータが正しく渡されたと仮定します。その後、すぐにルーターの のミドルウェア メソッドを呼び出します。ミドルウェア メソッドは、ルーターのミドルウェア属性配列にキーとクラス名を追加するだけです。 アプリ コンテナーで AppConsoleKernel シングルトンを共有します。 IlluminateFoundationConsoleKernal から継承されます。彼のコンストラクターは

  1. a
    IlluminateFoundationHttpKernel,实现了bootstrap, handle, terminate, getApplication这四个方法,可以想象,当收到request时候,流程就是前三个依次执行,非常简化。
    protected $bootstrappersp
    $app->singletonp
    protected $routeMiddleware


  2. IlluminateFoundationConsoleKernal。他的构造方法接受一个appDispatcherevent。并且设置了一个scheduler,用于每隔一个时间段执行任务。protected $commands属性和protected function schedule

    🎜🎜🎜🎜a🎜を受け入れます🎜🎜🎜🎜🎜🎜🎜それぞれ🎜🎜🎜🎜🎜D 🎜🎜i🎜🎜s🎜🎜p🎜🎜a🎜🎜t🎜🎜c🎜🎜h🎜🎜e🎜🎜r🎜🎜🎜🎜🎜🎜🎜🎜 🎜🎜 🎜event。また、スケジューラは、1 つおきの期間ごとにタスクを実行するように設定されています。 protected $command の属性と protected function schedule メソッドは両方ともオーバーライドに使用されます。 🎜
  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教程有兴趣的朋友有所帮助。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。