Rumah > Artikel > rangka kerja php > Lengkapkan struktur dan konfigurasi direktori Laravel dalam masa setengah jam
Artikel ini memberi anda pengetahuan tentang struktur dan konfigurasi direktori Laravel secara relatifnya lebih kaya dalam keadaan awal Selain pengawal tradisional, ia juga membantu kami menyediakan Direktori fail kod seperti skrip dan perisian tengah digunakan secara langsung saya harap ia akan membantu semua orang.
Struktur direktori Laravel akan menjadi lebih kaya dalam keadaan awal Sebagai tambahan kepada pengawal tradisional, Ia juga membantu kami menyediakan direktori untuk fail kod seperti skrip dan perisian tengah, yang pada asasnya boleh digunakan secara langsung.
Mula-mula, mari kita lihat apa yang ada dalam direktori akar.
Malah, anda boleh mengetahui fungsi direktori ini berdasarkan nama mereka Sebagai contoh, direktori aplikasi ialah kod aplikasi tertentu. Direktori konfigurasi menyimpan maklumat fail konfigurasi. Dalam artikel sebelum ini, kami menyebut bahawa jika anda menggunakan Laravel dalam mesin maya, anda perlu menggunakan pelayan fail.php dalam direktori akar Sebenarnya, fail ini memuatkan public/index.php dalam direktori akar.
bootstrap ialah fail yang perlu dimuatkan semasa memulakan rangka kerja Secara amnya, kandungan fail ini tidak diubah suai juga mengandungi fail direktori berkaitan cache. pangkalan data jelas merupakan kandungan berkaitan pangkalan data. public ialah direktori kemasukan rangka kerja kami Fail sumber lain juga boleh diletakkan di sini, seperti gambar yang dipaparkan secara terus, fail statik, dsb. sumber menyimpan pandangan dan fail sumber yang tidak disusun.
Direktori laluan ialah direktori di mana fail penghalaan disimpan Direktori ini sangat penting, sebenarnya fail penghalaan di dalamnya adalah sangat penting. Ia mengandungi web.php, api.php, channels.php dan console.php secara lalai, yang masing-masing mewakili penghalaan permintaan web lalai, penghalaan permintaan api, siaran acara pendaftaran dan arahan skrip konsol berasaskan penutupan.
Direktori storan digunakan untuk menyimpan pelbagai fail yang dijana oleh aplikasi, termasuk cache, log dan maklumat lain. Direktori ujian mengandungi kandungan yang berkaitan dengan ujian automatik.
Dalam direktori ini, mari fokus pada kandungan yang terkandung dalam direktori apl.
Direktori apl ialah direktori yang paling biasa digunakan dalam pembangunan aplikasi kami. Pengawal, model, perisian tengah dan kandungan lain aplikasi kami semuanya ada dalam direktori ini.
Direktori Console ialah direktori skrip baris arahan yang kami tulis, iaitu fungsi baris arahan yang boleh disesuaikan dan dijalankan melalui php artisan semuanya ada dalam direktori ini.
Pengecualian ialah kelas pengecualian yang boleh kami sesuaikan. Model menyimpan model data tersuai kami. Direktori Pembekal menyimpan lalai dan beberapa pembekal perkhidmatan yang boleh kami sesuaikan.
Seterusnya ialah direktori Http.
Pengawal Tidak perlu dikatakan, pengawal semuanya ditulis di sini. Middleware mengandungi middleware lalai Sudah tentu, middleware tersuai kami juga boleh ditulis dalam direktori ini.
Kernel.php ialah fail kawalan untuk meminta kernel Dalam fail ini, kita boleh menentukan perisian tengah yang diminta. Ini juga merupakan dokumen teras yang sangat penting Kami akan menerangkannya secara terperinci apabila kami mempelajarinya pada masa hadapan.
Kandungan tentang struktur direktori sebenarnya adalah seperti di atas Seterusnya, mari kita lihat fail konfigurasi, iaitu kandungan dalam direktori konfigurasi di bawah direktori root kandungan di sini juga yang sering kita Perlu didedahkan.
Malah, nama fail konfigurasi ini boleh memberitahu fungsinya. Dalam artikel seterusnya, kami tidak lama lagi akan berhubung dengan fail database.php, kerana dalam kandungan berkaitan kemasukan, kami masih perlu menyambung ke pangkalan data untuk mengalaminya.
Dalam database.php, anda bukan sahaja boleh mentakrifkan maklumat pangkalan data mysql untuk disambungkan, tetapi juga pangkalan data jenis NoSQL untuk disambungkan (konfigurasi sambungan redis telah diberikan secara lalai). Mari kita lihat maklumat sambungan MySQL di sini.
'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'), ]) : [], ],
Melalui kod fail konfigurasi, kita dapat melihat bahawa banyak maklumat diperoleh melalui fungsi env(). Kandungan yang diperolehi oleh fungsi ini sebenarnya adalah kandungan fail .env dalam direktori akar. Membuka fail .env ini, kita dapat melihat bahawa kaedah konfigurasi adalah serupa dengan fail php.ini, kedua-duanya adalah maklumat konfigurasi dalam bentuk key=value.
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=root DB_PASSWORD=
Di sini, kami boleh mengkonfigurasi maklumat sambungan pangkalan data dalam persekitaran semasa. Apakah faedah konfigurasi ini?
独立的配置文件这种形式的很容易实现配置中心,也很容易实现测试环境和正式环境的分别部署。一般我们不会将这个 .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 = [ \Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables::class, \Illuminate\Foundation\Bootstrap\LoadConfiguration::class, \Illuminate\Foundation\Bootstrap\HandleExceptions::class, \Illuminate\Foundation\Bootstrap\RegisterFacades::class, \Illuminate\Foundation\Bootstrap\RegisterProviders::class, \Illuminate\Foundation\Bootstrap\BootProviders::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 目录下的,所以有的文章中这个路径我就没有写了。
【相关推荐:laravel视频教程】
Atas ialah kandungan terperinci Lengkapkan struktur dan konfigurasi direktori Laravel dalam masa setengah jam. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!