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一区二区
日本精品久久久久久久久久| 久久综合九色综合88i| www.国产视频.com| 中文字幕在线视频精品| 日本黄网站色大片免费观看| 久久久久99精品成人片| 国产超级av在线| 潘金莲激情呻吟欲求不满视频| 特黄特黄一级片| 久草热视频在线观看| 中文字幕22页| 丁香花在线影院观看在线播放| 日本成人黄色网| 国产91porn| 国产九九在线观看| 国产日韩亚洲欧美在线| 性欧美极品xxxx欧美一区二区| 永久免费在线看片视频| 久久免费视频3| 青娱乐精品在线| 丁香婷婷激情网| 成人在线视频一区二区三区| 天天干天天爽天天射| 搞av.com| 亚洲成人动漫在线| 视频二区在线播放| 黄色国产精品视频| japanese在线播放| 三区视频在线观看| www.日日操| 人妻久久久一区二区三区| 中文字幕亚洲影院| 污视频免费在线观看网站| 亚洲熟妇无码一区二区三区导航| 不用播放器的免费av| 日韩精品一区二区三区色欲av| 九九久久九九久久| 久久久久久久久久毛片| 在线观看av日韩| 国产精品50p| 熟女少妇在线视频播放| 六月婷婷激情综合| av动漫在线免费观看| 成年人网站av| 久久久精品视频国产| 色免费在线视频| 亚洲欧美国产中文| 亚洲免费av一区二区三区| 国产真实乱子伦| 国产熟女高潮视频| 欧美日韩大尺度| 三级a在线观看| 污色网站在线观看| 国产一二三区av| 在线免费黄色网| 最新av在线免费观看| 性生活免费观看视频| wwwjizzjizzcom| 麻豆tv在线播放| 一二三四视频社区在线| 欧美一级在线看| 免费大片在线观看| 一级片视频免费观看| 中文字幕第88页| 三级黄色片播放| 五月天男人天堂| 不卡中文字幕在线| 久久福利一区二区| 国产 福利 在线| 天天色综合社区| 日本xxx免费| 欧美精品卡一卡二| 欧美日韩在线免费播放| 亚洲怡红院在线| 成人免费在线网| 四季av一区二区| 51xx午夜影福利| 亚洲爆乳无码专区| 欧美精品 - 色网| av在线播放天堂| 在线观看日本一区二区| 日本免费在线视频观看| www一区二区www免费| 在线免费视频一区| 国产精品久久久久久久久电影网| 五月丁香综合缴情六月小说| 亚洲一区在线不卡| av影院在线播放| 浓精h攵女乱爱av| 欧美这里只有精品| 午夜两性免费视频| 日韩精品 欧美| 桥本有菜av在线| 热久久精品国产| 999一区二区三区| 中文字幕av专区| 男人靠女人免费视频网站 | 男女超爽视频免费播放| 三上悠亚av一区二区三区| 国产高清www| 亚洲天堂伊人网| 黑森林福利视频导航| 日本美女爱爱视频| 99re6在线观看| 国产黄色特级片| 毛片在线播放视频| 人人妻人人澡人人爽精品欧美一区| 久草青青在线观看| 国产玉足脚交久久欧美| 91在线第一页| 在线观看国产一级片| 欧美一级黄色片视频| 久久这里只有精品23| 肉大捧一出免费观看网站在线播放 | 91九色在线观看视频| 糖心vlog在线免费观看| 国产三级三级看三级| 十八禁视频网站在线观看| 黄页免费在线观看视频| 国内自拍中文字幕| av动漫免费观看| 中日韩av在线播放| 五月婷婷丁香色| 无限资源日本好片| 88av.com| 国产又粗又长又大的视频| 国产乱子夫妻xx黑人xyx真爽| 一二三四视频社区在线| 亚洲 自拍 另类小说综合图区| 日韩欧美一级在线| 天天操天天干天天玩| 午夜探花在线观看| 麻豆视频传媒入口| 国产aaa免费视频| 亚洲熟妇无码一区二区三区导航| 日韩成人手机在线| 亚洲精品蜜桃久久久久久| 国内精品视频一区二区三区| 欧美一级片免费播放| 日本中文字幕片| 黄色手机在线视频| 2025韩国大尺度电影| 蜜桃网站在线观看| 日韩伦理在线免费观看| www黄色av| 欧美成人乱码一二三四区免费| 一级黄色在线播放| 97超碰免费观看| 人妻av中文系列| 激情五月亚洲色图| 成人性生交视频免费观看| 成人性做爰片免费视频| 国产美女主播在线| 国产免费999| 一道本在线观看视频| 国产69精品久久久久999小说| 欧美v在线观看| 激情在线观看视频| 成人午夜视频在线观看免费| 国产三级日本三级在线播放| www.色.com| 每日在线更新av| 日韩av片免费观看| 黄色av网址在线播放| 波多结衣在线观看| 亚洲欧美天堂在线| av在线免费观看国产| 黑人糟蹋人妻hd中文字幕| 爱爱爱视频网站| 午夜激情福利在线| 国产手机视频在线观看| 黄色免费观看视频网站| 偷拍盗摄高潮叫床对白清晰| 僵尸世界大战2 在线播放| 日本黄大片一区二区三区| cao在线观看| 麻豆md0077饥渴少妇| 十八禁视频网站在线观看| 国产视频在线观看网站| 亚洲成人福利在线| 国产精品视频一区二区三区四区五区| 色噜噜狠狠永久免费| 黄色一级片在线看| 亚洲欧美一二三| jizz欧美性11| 日本毛片在线免费观看| 免费成人进口网站| 亚欧激情乱码久久久久久久久| 一二三四视频社区在线| 免费看av软件| 不卡中文字幕在线观看| 黄色片视频在线播放| aa在线观看视频| 亚洲国产一二三精品无码| 污视频网址在线观看| 国产又黄又猛又粗| 黄色免费网址大全| 成年人黄色片视频| 国产麻花豆剧传媒精品mv在线 | 色男人天堂av|