久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網
最全最豐富的資訊網站

半個小時搞定Laravel目錄結構與配置

本篇文章給大家帶來了Laravel目錄結構與配置的相關知識,Laravel的目錄結構相對來說在初始狀態下會更豐富一些,除了傳統的控制器之外,也幫我們準備好了腳本、中間件之類的代碼文件的目錄,基本上是可以達到上手直接使用的,希望對大家有幫助。

半個小時搞定Laravel目錄結構與配置

Laravel 目錄結構與配置

Laravel 的目錄結構相對來說在初始狀態下會更豐富一些,除了傳統的控制器之外,也幫我們準備好了腳本、中間件之類的代碼文件的目錄,基本上是可以達到上手直接使用的。

目錄結構

首先我們來看一看根目錄都有什么。

半個小時搞定Laravel目錄結構與配置

其實根據名字就能知道這些目錄的作用,比如說 app 目錄是具體的應用代碼。config 目錄是存放配置文件信息的。在上篇文章中,我們提到過如果在虛擬機中使用 Laravel 的話,是需要用到 server.php 這個根目錄下的文件的,其實這個文件就是在根目錄下加載了 public/index.php 這個文件。

bootstrap 是在啟動框架的時候需要加載的文件,一般不太會修改這個文件里面的內容,在這個目錄下還包含 cache 相關的目錄文件。database 很明顯是數據庫相關的內容。public 就是我們框架的入口目錄,另外一些資源文件也可以放在這里,比如直接顯示的圖片、靜態文件之類的。resources 存放的是視圖和未編譯的資源文件。

routes 目錄是路由文件所存放的目錄,這個目錄很重要,當然,其實也就是這里面的路由文件很重要。它里面默認包含 web.php 、api.php 、channels.php 以及 console.php ,分別代表默認的 web 請求路由、api 請求路由、注冊事件廣播以及基于閉包的控制臺腳本命令。

storage 目錄是用于存儲應用程序生成的各類文件,包括緩存、日志等信息。tests 目錄包含自動化測試相關的內容。

在這些目錄中,我們再重點看一下 app 目錄中包含的內容。

半個小時搞定Laravel目錄結構與配置

app 目錄是我們應用開發中使用最多的目錄。我們應用的控制器、模型、中間件之類的內容都在這個目錄中。

Console 目錄是我們寫的命令行腳本目錄,也就是可以自定義的通過 php artisan 運行的命令行功能都在這個目錄中。

Exceptions 是我們可以自定義的異常類。Models 中存放我們自定義的數據模型。Providers 目錄中存放的是默認的以及我們可以自定義的一些服務提供者。

接下來是 Http 目錄。

Controllers 不用多說了,控制器都寫在這里。Middleware 放的是默認的中間件,當然,我們自定義的中間件也可以寫在這個目錄里面。

Kernel.php 是請求內核的控制文件,在這個文件中,我們可以定義請求的中間件。這也是一個非常重要的核心文件,將來學習到的時候我們再詳細的講解說明。

配置文件

關于目錄結構的內容其實就是上面這些,接下來我們再來看看配置文件也就是根目錄下 config 目錄里面的內容,這里面的內容也是我們經常需要接觸到的。

半個小時搞定Laravel目錄結構與配置

其實從這些配置文件的名字就可以看出它們的作用。在接下來的文章中我們馬上就要接觸到的就是 database.php 這個文件,因為在入門相關的內容中,我們還是要簡單地連下數據庫體驗一下的。

在 database.php 中,不僅可以定義要連接的 mysql 數據庫信息,也可以定義要連接的 NoSQL 類型的數據庫(默認已經給了 redis 的連接配置)。我們這里先看下 MySQL 連接信息。

'mysql' => [     'driver' => 'mysql',     'url' => env('DATABASE_URL'),     'host' => env('DB_HOST', '127.0.0.1'),     'port' => env('DB_PORT', '3306'),     'database' => env('DB_DATABASE', 'forge'),     'username' => env('DB_USERNAME', 'forge'),     'password' => env('DB_PASSWORD', ''),     'unix_socket' => env('DB_SOCKET', ''),     'charset' => 'utf8mb4',     'collation' => 'utf8mb4_unicode_ci',     'prefix' => '',     'prefix_indexes' => true,     'strict' => true,     'engine' => null,     'options' => extension_loaded('pdo_mysql') ? array_filter([         PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),     ]) : [], ],

通過配置文件代碼,我們可以看到很多信息都是通過 env() 這個函數獲取的。而這個函數獲取到的內容其實是根目錄下的 .env 這個文件里面的內容。打開這個 .env 文件,我們可以看到它和 php.ini 文件的配置方式是相似的,都是 key=value 這種形式的配置信息。

DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=root DB_PASSWORD=

在這里,我們就可以配置當前環境下的數據庫連接信息。這樣配置有什么好處呢?

獨立的配置文件這種形式的很容易實現配置中心,也很容易實現測試環境和正式環境的分別部署。一般我們不會將這個 .env 放到 git 中,或者跟隨代碼上傳。在正式環境或者測試環境都是手動地或者通過配置中心來進行配置。這樣的話,我們就不需要修改源代碼,只需要使用不同的這個 .env 配置文件就可以實現不同的環境下運行相同的代碼了。

通過 XDebug ,我們可以追蹤到 env() 這個方法在底層調用了 vlucas 的 DotEnv 這個 Composer 組件來進行 PHPENV 類型文件的讀寫加載。

對于加載來說,在程序運行的時候,我們會通過下面這段代碼來進行加載。

// laravel/framework/src/Illuminate/Foundation/Application.php foreach ($bootstrappers as $bootstrapper) {     $this['events']->dispatch('bootstrapping: '.$bootstrapper, [$this]);      $this->make($bootstrapper)->bootstrap($this);      $this['events']->dispatch('bootstrapped: '.$bootstrapper, [$this]); }

其中核心是 $this->make($bootstrapper)->bootstrap($this); 這一段,它在循環中會加載所有 $bootstrappers 數組中的內容,這個數組里面的內容是在 laravel/framework/src/Illuminate/Foundation/Http/Kernel.php 中的類變量 $bootstrappers 所定義的。第一個環境變量啟動加載器就是我們加載配置文件所需要的,如下所示:

// laravel/framework/src/Illuminate/Foundation/Http/Kernel.php /**  * The bootstrap classes for the application.  *  * @var string[]  */ protected $bootstrappers = [     IlluminateFoundationBootstrapLoadEnvironmentVariables::class,     IlluminateFoundationBootstrapLoadConfiguration::class,     IlluminateFoundationBootstrapHandleExceptions::class,     IlluminateFoundationBootstrapRegisterFacades::class,     IlluminateFoundationBootstrapRegisterProviders::class,     IlluminateFoundationBootstrapBootProviders::class, ];

源碼中和代碼中的 Bootstrap 相關的內容都是啟動加載器的實現,從文件名就可以看出,這個啟動加載器是加載環境變量相關內容的。.env 文件里面的配置信息也將是以整體的環境變量的形式加載到系統中。

// laravel/framework/src/Illuminate/Foundation/Bootstrap/LoadEnvironmentVariables.php $this->createDotenv($app)->safeLoad();

LoadEnvironmentVariables.php 中會通過上述代碼進入到 DotEnv 組件中,通過以下方法讀取配置文件相關的信息。

// vlucas/phpdotenv/src/Dotenv.php create()   // vlucas/phpdotenv/src/Loader/Loader.php  load()

最后通過 ServerConstAdapter.php 文件中的 write() 方法將這些配置文件中的信息寫入到 $_SERVER 全局變量數組中。

//vlucas/phpdotenv/src/Repository/Adapter/ServerConstAdapter.php  /**  * Write to an environment variable, if possible.  *  * @param string $name  * @param string $value  *  * @return bool  */ public function write(string $name, string $value) {     $_SERVER[$name] = $value;      return true; }

在路由文件中,我們可以通過打印 $_SERVER 數據看到配置文件里面我們配置過的信息。之后的讀取,也直接是讀取這個 $_SERVER 中的數據。

Route::get('/', function () {     var_dump($_SERVER);      var_dump(env('REDIS_PASSWORD')); // null     $_SERVER['REDIS_PASSWORD'] = '123456';     var_dump(env('REDIS_PASSWORD')); // string '123456'          return view('welcome'); });

其實反過來看,我們的 Laravel 就是將 .env 文件中的數據緩存到了全局變量 $_SERVER ,然后我們在將來使用的時候就直接從全局變量中獲取就可以了,這樣就可以避免下一次還要從文件讀取,從而提高系統效率。

總結

一開始以為就是簡單地講講目錄和配置文件,沒想到吧,直接就進入源碼的分析了。當然,這只是開胃菜而已。對于框架架構的學習,一定要配置好 XDebug 之類的調試工具,如果沒這些工具,這種使用了許多 Composer 組件來回調用的代碼還真不好找出最終實現的地方。

后面的文章也都會以這樣的方式進行,需要注意的是,我們的源碼都是在 vendor 目錄下的,所以有的文章中這個路徑我就沒有寫了。

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
在线看片国产福利你懂的| 国产精品美女久久久| 亚洲国产不卡| 最近高清中文在线字幕在线观看1| 精品国产成人| 91亚洲国产高清| 伊人久久高清| 欧美一区二区性| 午夜国产精品视频| 在线亚洲激情| 日本综合精品一区| 国产视频一区二| 日韩欧美在线精品| 久久av国产紧身裤| 国产一区二区三区四区二区| 91亚洲自偷观看高清| 黄毛片在线观看| 日韩成人亚洲| 亚洲一区日本| 国产精品一区毛片| 亚洲精品88| 午夜久久久久| 国产精品调教视频| 日韩欧美一区二区三区免费看| 欧美好骚综合网| 9久re热视频在线精品| 久久av网址| 日本а中文在线天堂| 免费人成在线不卡| 国产成人免费视频网站视频社区| 欧美.日韩.国产.一区.二区| 中文字幕日韩高清在线| 免费看久久久| 夜久久久久久| 久久久国产精品入口麻豆| 久久99伊人| 色在线中文字幕| 欧美日韩一区自拍| 亚洲天堂成人| 国产精品17p| 国产毛片久久| 亚洲精品在线影院| 蜜桃一区二区三区在线| 吉吉日韩欧美| 国产激情一区| 丝袜美腿亚洲色图| 日韩欧美少妇| 久久中文在线| 青草av.久久免费一区| 99视频一区| 蜜臀久久99精品久久一区二区 | 亚洲四虎影院| 国产日本亚洲| 日韩动漫一区| 午夜精品成人av| 国产精品1区| 国产乱子精品一区二区在线观看 | 噜噜噜久久亚洲精品国产品小说| 精品国产第一福利网站| 国产精品2023| 国产亚洲观看| 日韩中文字幕| 少妇高潮一区二区三区99| 日韩制服丝袜先锋影音| 亚洲免费成人| 亚洲一区二区三区高清| 亚洲精品一区二区妖精| 亚洲国内精品| 91视频一区| 日韩不卡视频在线观看| 日韩不卡免费高清视频| 久久久成人网| 在线亚洲欧美| 首页国产欧美日韩丝袜| 爽好多水快深点欧美视频| 亚洲欧美日韩国产综合精品二区| 国产精品婷婷| 人人精品久久| 久久香蕉精品香蕉| 精品视频高潮| 久久青草久久| 蜜臀久久99精品久久久久宅男 | 亚洲一区黄色| 日韩视频一二区| 精品一区二区三区的国产在线观看| 国产精品视频一区二区三区 | 九九久久国产| 99tv成人| 日本电影久久久| 精品亚洲二区| 久久国产中文字幕| 欧美影院三区| 日韩欧美精品一区二区综合视频| 国产精品欧美三级在线观看| 精品三级在线| 99久久久久| 欧美午夜三级| 国产中文一区| 亚洲深夜福利在线观看| 国产一区二区三区探花| 在线一区视频| 国产精品精品| 日韩精品一页| 四虎4545www国产精品 | 91精品观看| 四虎国产精品免费久久| 久久免费影院| 丝袜亚洲另类欧美| а√在线中文在线新版| 久久午夜精品| 播放一区二区| 国产精品传媒麻豆hd| 婷婷亚洲五月色综合| 日本va欧美va欧美va精品| 国产精品av一区二区| 麻豆久久一区| 日韩激情一区二区| 中日韩男男gay无套| 麻豆mv在线观看| 国产精品伊人| 91精品国产自产观看在线| 美女毛片一区二区三区四区| 精品视频网站| 粉嫩av一区二区三区四区五区| 日本欧美一区二区| 国产亚洲欧洲| 五月婷婷亚洲| 亚洲福利国产| 在线天堂中文资源最新版| 国产探花一区在线观看| 日本不卡一二三区黄网| 亚洲精品人人| 国产日韩欧美中文在线| 欧美在线91| 国产精品三级| 精品中国亚洲| 97精品国产一区二区三区| 成人在线免费观看91| 国产va免费精品观看精品视频| 美女av一区| av在线资源| 欧美日韩三区| 99精品在线观看| 国产探花一区二区| 日韩成人精品一区二区三区| 亚洲精品97| 亚洲激情中文在线| 日韩精品一级二级| 91精品国产经典在线观看| 国产视频一区二| 欧美aⅴ一区二区三区视频| 亚洲精品福利| 99riav国产精品| 香蕉成人久久| 国产乱码精品一区二区三区亚洲人| 国产精品99精品一区二区三区∴| 精品久久久久中文字幕小说| 亚洲成人二区| 婷婷亚洲综合| 日韩高清电影免费| 黄色aa久久| 亚洲精品韩国| 老司机精品视频在线播放| 久久精品官网| 国产精品天堂蜜av在线播放| 色婷婷久久久| 欧美在线首页| 激情欧美国产欧美| 日本不卡中文字幕| 日韩在线观看不卡| 欧美日韩午夜电影网| 99久久婷婷这里只有精品| 日本不卡的三区四区五区| 九九99久久精品在免费线bt| 亚洲少妇自拍| 欧美好骚综合网| 国产高清日韩| 免费在线观看不卡| 99精品视频精品精品视频| 国产精品白浆| 蜜桃视频免费观看一区| 色老板在线视频一区二区| 国产美女亚洲精品7777| 亚洲三级观看| 免费欧美在线视频| 国产一区不卡| 国产另类在线| 日韩精品久久久久久久软件91| 日韩欧美网址| 91亚洲一区| 国产美女高潮在线观看| 国产精品tv| 午夜精品影视国产一区在线麻豆| 精品免费av在线| 国产 日韩 欧美一区| 日韩av在线播放网址| 国产精品chinese| 日韩二区三区四区| 在线观看一区| 日韩精品亚洲专区在线观看|