久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      半個(gè)小時(shí)搞定Laravel目錄結(jié)構(gòu)與配置

      本篇文章給大家?guī)?lái)了Laravel目錄結(jié)構(gòu)與配置的相關(guān)知識(shí),Laravel的目錄結(jié)構(gòu)相對(duì)來(lái)說(shuō)在初始狀態(tài)下會(huì)更豐富一些,除了傳統(tǒng)的控制器之外,也幫我們準(zhǔn)備好了腳本、中間件之類的代碼文件的目錄,基本上是可以達(dá)到上手直接使用的,希望對(duì)大家有幫助。

      半個(gè)小時(shí)搞定Laravel目錄結(jié)構(gòu)與配置

      Laravel 目錄結(jié)構(gòu)與配置

      Laravel 的目錄結(jié)構(gòu)相對(duì)來(lái)說(shuō)在初始狀態(tài)下會(huì)更豐富一些,除了傳統(tǒng)的控制器之外,也幫我們準(zhǔn)備好了腳本、中間件之類的代碼文件的目錄,基本上是可以達(dá)到上手直接使用的。

      目錄結(jié)構(gòu)

      首先我們來(lái)看一看根目錄都有什么。

      半個(gè)小時(shí)搞定Laravel目錄結(jié)構(gòu)與配置

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

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

      routes 目錄是路由文件所存放的目錄,這個(gè)目錄很重要,當(dāng)然,其實(shí)也就是這里面的路由文件很重要。它里面默認(rèn)包含 web.php 、api.php 、channels.php 以及 console.php ,分別代表默認(rèn)的 web 請(qǐng)求路由、api 請(qǐng)求路由、注冊(cè)事件廣播以及基于閉包的控制臺(tái)腳本命令。

      storage 目錄是用于存儲(chǔ)應(yīng)用程序生成的各類文件,包括緩存、日志等信息。tests 目錄包含自動(dòng)化測(cè)試相關(guān)的內(nèi)容。

      在這些目錄中,我們?cè)僦攸c(diǎn)看一下 app 目錄中包含的內(nèi)容。

      半個(gè)小時(shí)搞定Laravel目錄結(jié)構(gòu)與配置

      app 目錄是我們應(yīng)用開(kāi)發(fā)中使用最多的目錄。我們應(yīng)用的控制器、模型、中間件之類的內(nèi)容都在這個(gè)目錄中。

      Console 目錄是我們寫(xiě)的命令行腳本目錄,也就是可以自定義的通過(guò) php artisan 運(yùn)行的命令行功能都在這個(gè)目錄中。

      Exceptions 是我們可以自定義的異常類。Models 中存放我們自定義的數(shù)據(jù)模型。Providers 目錄中存放的是默認(rèn)的以及我們可以自定義的一些服務(wù)提供者。

      接下來(lái)是 Http 目錄。

      Controllers 不用多說(shuō)了,控制器都寫(xiě)在這里。Middleware 放的是默認(rèn)的中間件,當(dāng)然,我們自定義的中間件也可以寫(xiě)在這個(gè)目錄里面。

      Kernel.php 是請(qǐng)求內(nèi)核的控制文件,在這個(gè)文件中,我們可以定義請(qǐng)求的中間件。這也是一個(gè)非常重要的核心文件,將來(lái)學(xué)習(xí)到的時(shí)候我們?cè)僭敿?xì)的講解說(shuō)明。

      配置文件

      關(guān)于目錄結(jié)構(gòu)的內(nèi)容其實(shí)就是上面這些,接下來(lái)我們?cè)賮?lái)看看配置文件也就是根目錄下 config 目錄里面的內(nèi)容,這里面的內(nèi)容也是我們經(jīng)常需要接觸到的。

      半個(gè)小時(shí)搞定Laravel目錄結(jié)構(gòu)與配置

      其實(shí)從這些配置文件的名字就可以看出它們的作用。在接下來(lái)的文章中我們馬上就要接觸到的就是 database.php 這個(gè)文件,因?yàn)樵谌腴T(mén)相關(guān)的內(nèi)容中,我們還是要簡(jiǎn)單地連下數(shù)據(jù)庫(kù)體驗(yàn)一下的。

      在 database.php 中,不僅可以定義要連接的 mysql 數(shù)據(jù)庫(kù)信息,也可以定義要連接的 NoSQL 類型的數(shù)據(jù)庫(kù)(默認(rèn)已經(jīng)給了 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'),     ]) : [], ],

      通過(guò)配置文件代碼,我們可以看到很多信息都是通過(guò) env() 這個(gè)函數(shù)獲取的。而這個(gè)函數(shù)獲取到的內(nèi)容其實(shí)是根目錄下的 .env 這個(gè)文件里面的內(nèi)容。打開(kāi)這個(gè) .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=

      在這里,我們就可以配置當(dāng)前環(huán)境下的數(shù)據(jù)庫(kù)連接信息。這樣配置有什么好處呢?

      獨(dú)立的配置文件這種形式的很容易實(shí)現(xiàn)配置中心,也很容易實(shí)現(xiàn)測(cè)試環(huán)境和正式環(huán)境的分別部署。一般我們不會(huì)將這個(gè) .env 放到 git 中,或者跟隨代碼上傳。在正式環(huán)境或者測(cè)試環(huán)境都是手動(dòng)地或者通過(guò)配置中心來(lái)進(jìn)行配置。這樣的話,我們就不需要修改源代碼,只需要使用不同的這個(gè) .env 配置文件就可以實(shí)現(xiàn)不同的環(huán)境下運(yùn)行相同的代碼了。

      通過(guò) XDebug ,我們可以追蹤到 env() 這個(gè)方法在底層調(diào)用了 vlucas 的 DotEnv 這個(gè) Composer 組件來(lái)進(jìn)行 PHPENV 類型文件的讀寫(xiě)加載。

      對(duì)于加載來(lái)說(shuō),在程序運(yùn)行的時(shí)候,我們會(huì)通過(guò)下面這段代碼來(lái)進(jìn)行加載。

      // 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); 這一段,它在循環(huán)中會(huì)加載所有 $bootstrappers 數(shù)組中的內(nèi)容,這個(gè)數(shù)組里面的內(nèi)容是在 laravel/framework/src/Illuminate/Foundation/Http/Kernel.php 中的類變量 $bootstrappers 所定義的。第一個(gè)環(huán)境變量啟動(dòng)加載器就是我們加載配置文件所需要的,如下所示:

      // 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 相關(guān)的內(nèi)容都是啟動(dòng)加載器的實(shí)現(xiàn),從文件名就可以看出,這個(gè)啟動(dòng)加載器是加載環(huán)境變量相關(guān)內(nèi)容的。.env 文件里面的配置信息也將是以整體的環(huán)境變量的形式加載到系統(tǒng)中。

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

      LoadEnvironmentVariables.php 中會(huì)通過(guò)上述代碼進(jìn)入到 DotEnv 組件中,通過(guò)以下方法讀取配置文件相關(guān)的信息。

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

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

      //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; }

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

      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'); });

      其實(shí)反過(guò)來(lái)看,我們的 Laravel 就是將 .env 文件中的數(shù)據(jù)緩存到了全局變量 $_SERVER ,然后我們?cè)趯?lái)使用的時(shí)候就直接從全局變量中獲取就可以了,這樣就可以避免下一次還要從文件讀取,從而提高系統(tǒng)效率。

      總結(jié)

      一開(kāi)始以為就是簡(jiǎn)單地講講目錄和配置文件,沒(méi)想到吧,直接就進(jìn)入源碼的分析了。當(dāng)然,這只是開(kāi)胃菜而已。對(duì)于框架架構(gòu)的學(xué)習(xí),一定要配置好 XDebug 之類的調(diào)試工具,如果沒(méi)這些工具,這種使用了許多 Composer 組件來(lái)回調(diào)用的代碼還真不好找出最終實(shí)現(xiàn)的地方。

      后面的文章也都會(huì)以這樣的方式進(jìn)行,需要注意的是,我們的源碼都是在 vendor 目錄下的,所以有的文章中這個(gè)路徑我就沒(méi)有寫(xiě)了。

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)