Maison > cadre php > Laravel > Structure et configuration complètes du répertoire Laravel en une demi-heure

Structure et configuration complètes du répertoire Laravel en une demi-heure

WBOY
Libérer: 2022-02-15 17:57:02
avant
2757 Les gens l'ont consulté

Cet article vous apporte des connaissances sur la structure et la configuration des répertoires de Laravel. La structure des répertoires de Laravel est relativement plus riche dans son état initial. En plus des contrôleurs traditionnels, il nous aide également à préparer des scripts. Le répertoire des fichiers de code tels que le middleware peut essentiellement être utilisé directement. . J'espère que cela sera utile à tout le monde.

Structure et configuration complètes du répertoire Laravel en une demi-heure

Structure et configuration du répertoire Laravel

La structure du répertoire Laravel est relativement plus riche dans l'état initial, en plus des contrôleurs traditionnels, elle nous aide également à préparer des codes tels que les scripts et le middleware.

Structure du répertoire

Tout d’abord, jetons un coup d’œil à ce qu’il y a dans le répertoire racine.

Structure et configuration complètes du répertoire Laravel en une demi-heure

En fait, vous pouvez connaître le rôle de ces répertoires en fonction de leurs noms. Par exemple, le répertoire de l'application est le code spécifique de l'application. Le répertoire de configuration stocke les informations du fichier de configuration. Dans l'article précédent, nous avons mentionné que si vous utilisez Laravel dans une machine virtuelle, vous devez utiliser le fichier server.php dans le répertoire racine. En fait, ce fichier charge public/index.php dans le répertoire racine.

bootstrap est un fichier qui doit être chargé lors du démarrage du framework. Généralement, le contenu de ce fichier n'est pas modifié. Ce répertoire contient également les fichiers de répertoire liés au cache. la base de données est évidemment un contenu lié à la base de données. public est le répertoire d'entrée de notre framework. D'autres fichiers de ressources peuvent également être placés ici, tels que des images directement affichées, des fichiers statiques, etc. resources stocke les vues et les fichiers de ressources non compilés.

Le répertoire routes est le répertoire où sont stockés les fichiers de routage. Ce répertoire est très important. Bien sûr, ce sont en fait les fichiers de routage qu'il contient. Il contient web.php, api.php,channels.php et console.php par défaut, qui représentent respectivement le routage des requêtes Web par défaut, le routage des requêtes API, la diffusion des événements d'enregistrement et les commandes de script de console basées sur la fermeture.

Le répertoire de stockage est utilisé pour stocker divers fichiers générés par l'application, notamment le cache, les journaux et d'autres informations. Le répertoire tests contient du contenu lié aux tests automatisés.

Dans ces répertoires, concentrons-nous sur le contenu contenu dans le répertoire de l'application. Le répertoire

Structure et configuration complètes du répertoire Laravel en une demi-heure

app est le répertoire le plus utilisé dans notre développement d'applications. Les contrôleurs, modèles, middleware et autres contenus de notre application se trouvent tous dans ce répertoire.

Le répertoire Console est le répertoire de script de ligne de commande que nous avons écrit, c'est-à-dire que les fonctions de ligne de commande qui peuvent être personnalisées et exécutées via php artisan se trouvent toutes dans ce répertoire.

Les exceptions sont des classes d'exceptions que nous pouvons personnaliser. Les modèles stockent nos modèles de données personnalisés. Le répertoire des fournisseurs stocke les fournisseurs de services par défaut et certains que nous pouvons personnaliser.

Vient ensuite le répertoire Http.

Contrôleurs Inutile de dire que les contrôleurs sont tous écrits ici. Le middleware contient le middleware par défaut. Bien entendu, notre middleware personnalisé peut également être écrit dans ce répertoire.

Kernel.php est le fichier de contrôle pour demander le noyau. Dans ce fichier, nous pouvons définir le middleware demandé. Il s'agit également d'un document de base très important. Nous l'expliquerons en détail lorsque nous l'apprendrons à l'avenir.

Fichier de configuration

Le contenu de la structure des répertoires est en fait celui ci-dessus. Ensuite, jetons un coup d'œil au fichier de configuration, qui est le contenu du répertoire de configuration sous le répertoire racine. Le contenu ici est également ce dont nous avons souvent besoin. entrer en contact avec.

Structure et configuration complètes du répertoire Laravel en une demi-heure

En fait, les noms de ces fichiers de configuration peuvent indiquer leurs fonctions. Dans le prochain article, nous entrerons bientôt en contact avec le fichier database.php, car dans le contenu lié à l'entrée, il suffit encore de se connecter à la base de données pour en faire l'expérience.

Dans database.php, vous pouvez non seulement définir les informations de la base de données mysql à connecter, mais également la base de données de type NoSQL à connecter (la configuration de connexion redis a été donnée par défaut). Jetons un coup d'œil aux informations de connexion MySQL ici.

'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'),
    ]) : [],
],
Copier après la connexion

Grâce au code du fichier de configuration, nous pouvons voir que de nombreuses informations sont obtenues via la fonction env(). Le contenu obtenu par cette fonction est en réalité le contenu du fichier .env dans le répertoire racine. En ouvrant ce fichier .env, nous pouvons voir que la méthode de configuration est similaire à celle du fichier php.ini, qui sont tous deux des informations de configuration sous la forme clé=valeur.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
Copier après la connexion

Ici, nous pouvons configurer les informations de connexion à la base de données dans l'environnement actuel. Quels sont les avantages de cette 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]);
}
Copier après la connexion

其中核心是 $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,
];
Copier après la connexion

源码中和代码中的 Bootstrap 相关的内容都是启动加载器的实现,从文件名就可以看出,这个启动加载器是加载环境变量相关内容的。.env 文件里面的配置信息也将是以整体的环境变量的形式加载到系统中。

// laravel/framework/src/Illuminate/Foundation/Bootstrap/LoadEnvironmentVariables.php
$this->createDotenv($app)->safeLoad();
Copier après la connexion

LoadEnvironmentVariables.php 中会通过上述代码进入到 DotEnv 组件中,通过以下方法读取配置文件相关的信息。

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

// vlucas/phpdotenv/src/Loader/Loader.php 
load()
Copier après la connexion

最后通过 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;
}
Copier après la connexion

在路由文件中,我们可以通过打印 \$_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');
});
Copier après la connexion

其实反过来看,我们的 Laravel 就是将 .env 文件中的数据缓存到了全局变量 $_SERVER ,然后我们在将来使用的时候就直接从全局变量中获取就可以了,这样就可以避免下一次还要从文件读取,从而提高系统效率。

总结

一开始以为就是简单地讲讲目录和配置文件,没想到吧,直接就进入源码的分析了。当然,这只是开胃菜而已。对于框架架构的学习,一定要配置好 XDebug 之类的调试工具,如果没这些工具,这种使用了许多 Composer 组件来回调用的代码还真不好找出最终实现的地方。

后面的文章也都会以这样的方式进行,需要注意的是,我们的源码都是在 vendor 目录下的,所以有的文章中这个路径我就没有写了。

【相关推荐:laravel视频教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal