Heim  >  Artikel  >  PHP-Framework  >  Vollständige Laravel-Verzeichnisstruktur und -Konfiguration in einer halben Stunde

Vollständige Laravel-Verzeichnisstruktur und -Konfiguration in einer halben Stunde

WBOY
WBOYnach vorne
2022-02-15 17:33:402720Durchsuche

Dieser Artikel vermittelt Ihnen Wissen über die Verzeichnisstruktur und -konfiguration von Laravel. Zusätzlich zu herkömmlichen Controllern hilft er uns auch bei der Vorbereitung von Skripten. Das Verzeichnis von Codedateien wie Middleware kann grundsätzlich direkt verwendet werden . Ich hoffe, es wird für alle hilfreich sein.

Vollständige Laravel-Verzeichnisstruktur und -Konfiguration in einer halben Stunde

Laravel-Verzeichnisstruktur und -Konfiguration

Die Verzeichnisstruktur von Laravel ist im Ausgangszustand relativ umfangreicher und hilft uns auch bei der Vorbereitung von Codes wie Skripten und Middleware. Das Dateiverzeichnis kann grundsätzlich direkt verwendet werden.

Verzeichnisstruktur

Schauen wir uns zunächst an, was sich im Stammverzeichnis befindet.

Vollständige Laravel-Verzeichnisstruktur und -Konfiguration in einer halben Stunde

Tatsächlich können Sie die Rolle dieser Verzeichnisse anhand ihrer Namen erkennen. Das App-Verzeichnis ist beispielsweise der spezifische Anwendungscode. Das Konfigurationsverzeichnis speichert Konfigurationsdateiinformationen. Im vorherigen Artikel haben wir erwähnt, dass Sie, wenn Sie Laravel in einer virtuellen Maschine verwenden, die Datei server.php im Stammverzeichnis verwenden müssen. Tatsächlich lädt diese Datei public/index.php im Stammverzeichnis.

bootstrap ist eine Datei, die beim Starten des Frameworks geladen werden muss. Der Inhalt dieser Datei wird im Allgemeinen nicht geändert. Dieses Verzeichnis enthält auch Cache-bezogene Verzeichnisdateien. Bei einer Datenbank handelt es sich offensichtlich um datenbankbezogenen Inhalt. public ist das Eintragsverzeichnis unseres Frameworks. Hier können auch andere Ressourcendateien abgelegt werden, z. B. direkt angezeigte Bilder, statische Dateien usw. resources speichert Ansichten und unkompilierte Ressourcendateien.

Das Verzeichnis „Routen“ ist das Verzeichnis, in dem die Routing-Dateien gespeichert sind. Natürlich sind es die Routing-Dateien darin, die sehr wichtig sind. Es enthält standardmäßig web.php, api.php,channels.php und console.php, die jeweils die standardmäßigen Web-Anforderungs-Routing-, API-Anforderungs-Routing-, Registrierungsereignis-Broadcast- und abschlussbasierten Konsolenskriptbefehle darstellen.

Das Speicherverzeichnis wird zum Speichern verschiedener von der Anwendung generierter Dateien verwendet, einschließlich Cache, Protokollen und anderen Informationen. Das Testverzeichnis enthält Inhalte im Zusammenhang mit automatisierten Tests.

In diesen Verzeichnissen konzentrieren wir uns auf den Inhalt, der im App-Verzeichnis enthalten ist.

Vollständige Laravel-Verzeichnisstruktur und -Konfiguration in einer halben Stunde

app-Verzeichnis ist das am häufigsten verwendete Verzeichnis in unserer Anwendungsentwicklung. Die Controller, Modelle, Middleware und andere Inhalte unserer Anwendung befinden sich alle in diesem Verzeichnis.

Das Konsolenverzeichnis ist das von uns geschriebene Befehlszeilenskriptverzeichnis. Das heißt, die Befehlszeilenfunktionen, die über PHP Artisan angepasst und ausgeführt werden können, befinden sich alle in diesem Verzeichnis.

Ausnahmen sind Ausnahmeklassen, die wir anpassen können. Modelle speichern unsere benutzerdefinierten Datenmodelle. Das Anbieterverzeichnis speichert Standardanbieter und einige Dienstanbieter, die wir anpassen können.

Als nächstes kommt das HTTP-Verzeichnis.

Controller Selbstverständlich sind hier alle Controller aufgeführt. Middleware enthält die Standard-Middleware. Natürlich kann auch unsere angepasste Middleware in dieses Verzeichnis geschrieben werden.

Kernel.php ist die Steuerdatei zum Anfordern des Kernels. In dieser Datei können wir die angeforderte Middleware definieren. Dies ist auch ein sehr wichtiges Kerndokument. Wir werden es in Zukunft ausführlich erläutern.

Konfigurationsdatei

Der Inhalt der Verzeichnisstruktur ist eigentlich der oben genannte. Schauen wir uns als Nächstes die Konfigurationsdatei an, bei der es sich um den Inhalt im Konfigurationsverzeichnis unter dem Stammverzeichnis handelt. Der Inhalt hier ist auch der, den wir häufig benötigen in Kontakt kommen.

Vollständige Laravel-Verzeichnisstruktur und -Konfiguration in einer halben Stunde

Tatsächlich können die Namen dieser Konfigurationsdateien ihre Funktionen erkennen. Im nächsten Artikel werden wir uns bald mit der Datei „database.php“ befassen, da wir im eintragsbezogenen Inhalt noch eine Verbindung zur Datenbank herstellen müssen, um sie zu erleben.

In der Datenbank.php können Sie nicht nur die zu verbindenden MySQL-Datenbankinformationen definieren, sondern auch die zu verbindende NoSQL-Datenbank (die Redis-Verbindungskonfiguration wurde standardmäßig angegeben). Werfen wir hier einen Blick auf die MySQL-Verbindungsinformationen.

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

Durch den Code der Konfigurationsdatei können wir sehen, dass viele Informationen über die Funktion env() abgerufen werden. Der durch diese Funktion erhaltene Inhalt ist tatsächlich der Inhalt der .env-Datei im Stammverzeichnis. Wenn wir diese .env-Datei öffnen, können wir sehen, dass die Konfigurationsmethode der der php.ini-Datei ähnelt. Bei beiden handelt es sich um Konfigurationsinformationen in Form von Schlüssel = Wert.

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

Hier können wir die Datenbankverbindungsinformationen in der aktuellen Umgebung konfigurieren. Welche Vorteile bietet diese Konfiguration?

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

Das obige ist der detaillierte Inhalt vonVollständige Laravel-Verzeichnisstruktur und -Konfiguration in einer halben Stunde. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen