溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

laravel框架的學(xué)習(xí)筆記(一) 運(yùn)行邏輯

發(fā)布時間:2020-07-02 09:51:08 來源:網(wǎng)絡(luò) 閱讀:780 作者:wangchunyi123 欄目:開發(fā)技術(shù)

   1、laravel應(yīng)用的入口文件都是public/index.php文件,所有請求都會被web服務(wù)器導(dǎo)向這個文件。這里是加載框架其它部分的起點(diǎn)。

          index.php文件載入composer生成的自動加載設(shè)置,然后從bootstrap/app.php腳本獲取Laravel應(yīng)用實(shí)例,Laravel的第一個動作就是創(chuàng)建服務(wù)容器實(shí)例。

  2、HTTP/Console內(nèi)核

       接下來,請求被發(fā)送到HTTP內(nèi)核或者Console內(nèi)核,這取決于進(jìn)入應(yīng)用的請求類型。這兩個內(nèi)核是所有請求要經(jīng)過的中央處理器,現(xiàn)在,就讓我們聚焦在位于app/Http/Kernel.php的HTTP內(nèi)核。

         HTTP 內(nèi)核繼承自 Illuminate\Foundation\Http\Kernel 類,該類定義了一個 bootstrappers 數(shù)組,這個數(shù)組中的類在請求被執(zhí)行前運(yùn)行,這些 bootstrappers 配置了錯誤處理、日志、檢測應(yīng)用環(huán)境以及其它在請求被處理前需要執(zhí)行的任務(wù)。

       HTTP 內(nèi)核還定義了一系列所有請求在處理前需要經(jīng)過的 HTTP 中間件,這些中間件處理 HTTP 會話的讀寫、判斷應(yīng)用是否處于維護(hù)模式、驗(yàn)證 CSRF 令牌等等。

     HTTP 內(nèi)核的標(biāo)志性方法 handle 處理的邏輯相當(dāng)簡單:獲取一個 Request,返回一個 Response,把該內(nèi)核想象作一個代表整個應(yīng)用的大黑盒子,輸入 HTTP 請求,返回 HTTP 響應(yīng)。

      服務(wù)提供者

     內(nèi)核啟動過程中最重要的動作之一就是為了應(yīng)用載入服務(wù)提供者,應(yīng)用的所有服務(wù)提供者都被配置。

     在config/app.php配置未見的providers數(shù)組中。首先,所有提供者的register方法被調(diào)用,然后所有提供者被注冊之后,boot方法就會被調(diào)用。

      服務(wù)提供者負(fù)責(zé)啟動框架的所有各種各樣的組件,比如數(shù)據(jù)庫、隊(duì)列、驗(yàn)證器,以及路由組件等,正是因?yàn)樗麄儐硬⑴渲昧丝蚣芴峁┑乃刑匦?,服?wù)提供者是整個 Laravel 啟動過程中最重要的部分。

       分發(fā)請求

         一旦應(yīng)用被啟動并且所有服務(wù)提供者被注冊,Request將會被交給路由器進(jìn)行分發(fā),路由器將會分發(fā)請求到路由或者控制器,同時運(yùn)行所有路由指定的中間件。

     3、聚焦服務(wù)提供者

        服務(wù)提供者是啟動 Laravel 應(yīng)用中最關(guān)鍵的部分,應(yīng)用實(shí)例被創(chuàng)建后,服務(wù)提供者被注冊,請求被交給啟動后的應(yīng)用進(jìn)行處理,整個過程就是這么簡單!

        對 Laravel 應(yīng)用如何通過服務(wù)提供者構(gòu)建和啟動有一個牢固的掌握非常有價值,當(dāng)然,應(yīng)用默認(rèn)的服務(wù)提供者存放在app/Providers目錄下。

        默認(rèn)情況下,AppServiceProvider 是空的,這里是添加自定義啟動和服務(wù)容器綁定的最佳位置,當(dāng)然,對大型應(yīng)用,你可能希望創(chuàng)建多個服務(wù)提供者,每一個都有著更加細(xì)粒度的啟動。


      注意:由此可以看出,laravel的所有路徑都是通過本身的路由器進(jìn)行定義的,和tp,ci這些按照規(guī)則訪問控制器是完全不一樣的。


目錄

        根目錄

        新安裝的 Laravel 應(yīng)用包含許多文件夾:

        app目錄包含了應(yīng)用的核心代碼;

        bootstrap目錄包含了少許文件用于框架的啟動和自動載入配置,還有一個cache文件夾用于包含框架生成的啟動文件以提高性能;

        config目錄包含了應(yīng)用所有的配置文件;

        database目錄包含了數(shù)據(jù)遷移及填充文件,如果你喜歡的話還可以將其作為 SQLite 數(shù)據(jù)庫存放目錄;

        public目錄包含了前端控制器和資源文件(圖片、JavaScript、CSS等);

        resources目錄包含了視圖文件及原生資源文件(LESS、SASS、CoffeeScript),以及本地化文件;

        storage目錄包含了編譯過的Blade模板、基于文件的session、文件緩存,以及其它由框架生成的文件,該文件夾被細(xì)分為成app、frameworklogs子目錄,app目錄用于存放應(yīng)用要使用的文件,framework目錄用于存放框架生成的文件和緩存,最后,logs目錄包含應(yīng)用的日志文件;

        tests目錄包含自動化測試,其中已經(jīng)提供了一個開箱即用的PHPUnit示例;

        vendor目錄包含Composer依賴;

    App目錄

        應(yīng)用的核心代碼位于app目錄下,默認(rèn)情況下,該目錄位于命名空間 App 下,  并且被 Composer 通過 PSR-4自動載入標(biāo)準(zhǔn) 自動加載。你可以通過Artisan命令app:name來修改該命名空間。

        app目錄下包含多個子目錄,如Console、Http、Providers等。ConsoleHttp目錄提供了進(jìn)入應(yīng)用核心的API,HTTP協(xié)議和CLI是和應(yīng)用進(jìn)行交互的兩種機(jī)制,但實(shí)際上并不包含應(yīng)用邏輯。換句話說,它們只是兩個向應(yīng)用發(fā)布命令的方式。Console目錄包含了所有的Artisan命令,Http目錄包含了控制器、中間件和請求等。

        Jobs目錄是放置隊(duì)列任務(wù)的地方,應(yīng)用中的任務(wù)可以被隊(duì)列化,也可以在當(dāng)前請求生命周期內(nèi)同步執(zhí)行。

        Events目錄是放置事件類的地方,事件可以用于通知應(yīng)用其它部分給定的動作已經(jīng)發(fā)生,并提供靈活的解耦的處理。

        Listeners目錄包含事件的處理器類,處理器接收一個事件并提供對該事件發(fā)生后的響應(yīng)邏輯,比如,UserRegistered事件可以被SendWelcomeEmail監(jiān)聽器處理。

        Exceptions目錄包含應(yīng)用的異常處理器,同時還是處理應(yīng)用拋出的任何異常的好地方。

        注意:app目錄中的很多類都可以通過Artisan命令生成,要查看所有有效的命令,可以在終端中運(yùn)行php artisan list make命令。









向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI