search
HomePHP FrameworkLaravelComplete Laravel directory structure and configuration in half an hour

This article brings you knowledge about Laravel directory structure and configuration. Laravel's directory structure is relatively richer in the initial state. In addition to the traditional controller, it also helps us prepare The directory of code files such as scripts and middleware can basically be used directly. I hope it will be helpful to everyone.

Complete Laravel directory structure and configuration in half an hour

Laravel directory structure and configuration

Laravel’s directory structure will be relatively richer in the initial state. In addition to the traditional controller, It also helps us prepare directories for code files such as scripts and middleware, which can basically be used directly.

Directory structure

First let’s take a look at what’s in the root directory.

Complete Laravel directory structure and configuration in half an hour

In fact, you can know the functions of these directories based on their names. For example, the app directory is the specific application code. The config directory stores configuration file information. In the previous article, we mentioned that if you use Laravel in a virtual machine, you need to use the file server.php in the root directory. In fact, this file loads public/index.php in the root directory. document.

bootstrap is a file that needs to be loaded when starting the framework. Generally, the contents of this file are not modified. This directory also contains cache-related directory files. database is obviously database related content. public is the entry directory of our framework. Other resource files can also be placed here, such as directly displayed images and static files. resources stores views and uncompiled resource files.

routes directory is the directory where routing files are stored. This directory is very important. Of course, it is actually the routing files inside that are very important. It contains web.php, api.php, channels.php and console.php by default, which respectively represent the default web request routing, api request routing, registration event broadcast and closure-based console script commands.

The storage directory is used to store various files generated by the application, including cache, logs and other information. The tests directory contains content related to automated testing.

In these directories, let’s focus on the content contained in the app directory.

Complete Laravel directory structure and configuration in half an hour

The app directory is the most commonly used directory in our application development. The controllers, models, middleware and other content of our application are all in this directory.

The Console directory is the command line script directory we wrote, that is, the command line functions that can be customized and run through php artisan are all in this directory.

Exceptions are exception classes that we can customize. Models store our customized data models. The Providers directory stores default and some service providers that we can customize.

Next is the Http directory.

Controllers Needless to say, the controllers are all written here. Middleware contains the default middleware. Of course, our customized middleware can also be written in this directory.

Kernel.php is the control file for requesting the kernel. In this file, we can define the requested middleware. This is also a very important core document. We will explain it in detail when we learn it in the future.

Configuration file

The content about the directory structure is actually the above. Next, let’s take a look at the configuration file, which is the content in the config directory under the root directory. The content here is also what we often Need to be exposed.

Complete Laravel directory structure and configuration in half an hour

In fact, you can see their functions from the names of these configuration files. In the next article, we will soon come into contact with the database.php file, because in the entry-related content, we still need to simply connect to the database to experience it.

In database.php, you can not only define the mysql database information to be connected, but also the NoSQL type database to be connected (redis connection configuration has been given by default). Let’s take a look at the MySQL connection information here.

'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'),
    ]) : [],
],

Through the configuration file code, we can see that a lot of information is obtained through the env() function. The content obtained by this function is actually the content of the .env file in the root directory. Opening this .env file, we can see that the configuration method is similar to that of the php.ini file, and both have configuration information in the form of key=value.

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

Here, we can configure the database connection information in the current environment. What are the benefits of this configuration?

独立的配置文件这种形式的很容易实现配置中心,也很容易实现测试环境和正式环境的分别部署。一般我们不会将这个 .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视频教程

The above is the detailed content of Complete Laravel directory structure and configuration in half an hour. For more information, please follow other related articles on the PHP Chinese website!

Statement
This article is reproduced at:CSDN. If there is any infringement, please contact admin@php.cn delete
What is the latest Laravel version?What is the latest Laravel version?May 09, 2025 am 12:09 AM

As of October 2023, Laravel's latest version is 10.x. 1.Laravel10.x supports PHP8.1, improving development efficiency. 2.Jetstream improves support for Livewire and Inertia.js, simplifies front-end development. 3.EloquentORM adds full-text search function to improve data processing performance. 4. Pay attention to dependency package compatibility when using it and apply cache optimization performance.

Laravel Migrations: A Beginner's Guide to Database ManagementLaravel Migrations: A Beginner's Guide to Database ManagementMay 09, 2025 am 12:07 AM

LaravelMigrationsstreamlinedatabasemanagementbyprovidingversioncontrolforyourdatabaseschema.1)Theyallowyoutodefineandsharethestructureofyourdatabase,makingiteasytomanagechangesovertime.2)Migrationscanbecreatedandrunusingsimplecommands,ensuringthateve

Laravel migration: Best coding guideLaravel migration: Best coding guideMay 09, 2025 am 12:03 AM

Laravel's migration system is a powerful tool for developers to design and manage databases. 1) Ensure that the migration file is named clearly and use verbs to describe the operation. 2) Consider data integrity and performance, such as adding unique constraints to fields. 3) Use transaction processing to ensure database consistency. 4) Create an index at the end of the migration to optimize performance. 5) Maintain the atomicity of migration, and each file contains only one logical operation. Through these practices, efficient and maintainable migration code can be written.

Latest Laravel Version: Stay Up-to-Date with the Newest FeaturesLatest Laravel Version: Stay Up-to-Date with the Newest FeaturesMay 09, 2025 am 12:03 AM

Laravel's latest version is 10.x, released in early 2023. This version brings enhanced EloquentORM functionality and a simplified routing system, improving development efficiency and performance, but it needs to be tested carefully during upgrades to prevent problems.

Mastering Laravel Soft Deletes: Best Practices and Advanced TechniquesMastering Laravel Soft Deletes: Best Practices and Advanced TechniquesMay 08, 2025 am 12:25 AM

Laravelsoftdeletesallow"deletion"withoutremovingrecordsfromthedatabase.Toimplement:1)UsetheSoftDeletestraitinyourmodel.2)UsewithTrashed()toincludesoft-deletedrecordsinqueries.3)CreatecustomscopeslikeonlyTrashed()forstreamlinedcode.4)Impleme

Laravel Soft Deletes: Restoring and Permanently Deleting RecordsLaravel Soft Deletes: Restoring and Permanently Deleting RecordsMay 08, 2025 am 12:24 AM

In Laravel, restore the soft deleted records using the restore() method, and permanently delete the forceDelete() method. 1) Use withTrashed()->find()->restore() to restore a single record, and use onlyTrashed()->restore() to restore a single record. 2) Permanently delete a single record using withTrashed()->find()->forceDelete(), and multiple records use onlyTrashed()->forceDelete().

The Current Laravel Release: Download and Upgrade Today!The Current Laravel Release: Download and Upgrade Today!May 08, 2025 am 12:22 AM

You should download and upgrade to the latest Laravel version as it provides enhanced EloquentORM capabilities and new routing features, which can improve application efficiency and security. To upgrade, follow these steps: 1. Back up the current application, 2. Update the composer.json file to the latest version, 3. Run the update command. While some common problems may be encountered, such as discarded functions and package compatibility, these issues can be solved through reference documentation and community support.

Laravel: When should I update to the last version?Laravel: When should I update to the last version?May 08, 2025 am 12:18 AM

YoushouldupdatetothelatestLaravelversionwhenthebenefitsclearlyoutweighthecosts.1)Newfeaturesandimprovementscanenhanceyourapplication.2)Securityupdatesarecrucialifvulnerabilitiesareaddressed.3)Performancegainsmayjustifyanupdateifyourappstruggles.4)Ens

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

VSCode Windows 64-bit Download

VSCode Windows 64-bit Download

A free and powerful IDE editor launched by Microsoft

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools