gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费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號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
久热精品在线播放| www.av蜜桃| 久草精品在线播放| 自慰无码一区二区三区| www.亚洲成人网| 日韩黄色片在线| 每日在线观看av| 337p粉嫩大胆噜噜噜鲁| 成人中文字幕在线播放| 欧美女人性生活视频| 国产一级不卡毛片| 亚洲黄色av片| 天堂网成人在线| 精品国产一区二区三区无码| 日韩av在线第一页| 一区二区三区网址| 做爰高潮hd色即是空| 国产aaa免费视频| 999香蕉视频| 熟女熟妇伦久久影院毛片一区二区| mm131午夜| 欧美色图另类小说| 在线免费黄色网| 欧美久久久久久久久久久久久| 50路60路老熟妇啪啪| 国产九九热视频| 日韩精品在线观看av| 热久久精品免费视频| 国产高潮呻吟久久久| 秋霞无码一区二区| 亚洲高清免费在线观看| 日韩欧美猛交xxxxx无码| 别急慢慢来1978如如2| 日韩中文在线字幕| 熟妇人妻va精品中文字幕 | 欧美两根一起进3p做受视频| 天天操天天爱天天爽| 日韩一级免费看| 婷婷免费在线观看| 日本福利视频在线| 在线观看av的网址| 天天干天天综合| 波多野结衣乳巨码无在线| 99re精彩视频| 日韩手机在线观看视频| 九九久久九九久久| 日本不卡一区在线| 看欧美ab黄色大片视频免费| 97免费视频观看| 麻豆传媒网站在线观看| 99国产精品久久久久久| 欧美黑人又粗又大又爽免费| 激情五月宗合网| 天堂8在线天堂资源bt| 日本女人高潮视频| 午夜影院免费版| 伊人免费视频二| 欧美又黄又嫩大片a级| 亚洲免费看av| 色播五月综合网| 污网站在线免费| 日韩成人精品视频在线观看| 国产一区二区在线免费播放| 欧美黄色一级片视频| 成熟老妇女视频| 黄色三级视频片| 亚洲36d大奶网| 中文字幕精品一区二区三区在线| 日本爱爱免费视频| 污污网站在线观看视频| 日韩一级免费片| 自拍一级黄色片| www.av91| 欧美国产日韩在线播放| 中文字幕一区二区三区四区在线视频 | 亚洲美女性囗交| 亚洲高清av一区二区三区| 中文字幕55页| 国产欧美日韩小视频| 欧美视频在线观看视频| 欧美成人xxxxx| 中文字幕视频三区| 国产日本在线播放| 久久久久久久久久福利| 亚洲精品第三页| 久草免费福利在线| 国产精品亚洲a| 国产又大又长又粗又黄| 无码粉嫩虎白一线天在线观看 | 波多野结衣网页| 国产午夜大地久久| 一区二区三区 日韩| 大桥未久一区二区| 麻豆传传媒久久久爱| 精品综合久久久久| 波多野结衣乳巨码无在线| 日本中文字幕影院| 91免费黄视频| 天堂av.com| 国产视频一区二区三区在线播放| 国产系列第一页| 国产一区视频免费观看| 日韩精品免费一区| 我要看一级黄色大片| 欧美又粗又长又爽做受| 欧美一级视频在线| 红桃av在线播放| 青青青青在线视频| 亚洲制服在线观看| 99热这里只有精品在线播放| 毛片在线播放视频| 亚洲制服在线观看| 欧美一级特黄a| 国产资源在线视频| 国产一区二区三区乱码| 五月天开心婷婷| 免费日韩中文字幕| 少妇av一区二区三区无码| 国产精品久久久久久9999| 亚洲五月天综合| 97国产精东麻豆人妻电影| 丁香色欲久久久久久综合网| 中文字幕综合在线观看| 99久久99精品| 四虎成人在线播放| www,av在线| 国产奶头好大揉着好爽视频| www.五月天色| 日本免费色视频| 日本美女视频一区| 黄色a级三级三级三级| 黄色aaaaaa| 日韩最新中文字幕| 黄色一级片av| www精品久久| 免费毛片小视频| 激情综合网婷婷| 天天影视综合色| 欧美第一页浮力影院| 三日本三级少妇三级99| 日本黄色播放器| 99久久久精品视频| 久久久久免费看黄a片app| 久久久性生活视频| 青青视频在线播放| 成人综合久久网| 青少年xxxxx性开放hg| 欧美这里只有精品| 精品视频一区二区在线| 视色视频在线观看| 日韩一级片一区二区| 精品久久久久久久久久中文字幕| 国产av麻豆mag剧集| 日本在线视频www| 在线成人免费av| 国产v片免费观看| 成 人 黄 色 小说网站 s色| 久久精品国产99久久99久久久| 无码人妻精品一区二区蜜桃网站| 国产中文字幕视频在线观看| 国产美女18xxxx免费视频| 91看片淫黄大片91| 日本精品久久久久中文字幕| 三级av免费看| 日韩亚洲在线视频| 日韩视频一二三| 国产wwwxx| 久久久亚洲国产精品| 亚洲精品在线视频播放| 国产一区二区在线视频播放| 999这里有精品| 欧美 日韩 国产在线观看| www.午夜色| 亚洲性生活网站| 免费国产黄色网址| 佐佐木明希av| 91精品999| 中文字幕av不卡在线| 国产特级淫片高清视频| 美女在线免费视频| 亚洲精品成人在线播放| av丝袜天堂网| 男女午夜激情视频| 真人抽搐一进一出视频| 成人免费看片视频在线观看| 亚洲娇小娇小娇小| 日本免费观看网站| 亚洲 高清 成人 动漫| 青青青青在线视频| 在线观看av的网址| 日韩精品一区二区三区电影| 99视频在线观看视频| 57pao国产成永久免费视频| 国产精品亚洲αv天堂无码| 欧美精品一区免费| 免费观看精品视频| 成年人在线观看视频免费| 欧美在线观看视频网站| 久久国产乱子伦免费精品| 欧美三级午夜理伦三级|