Laravel из Структура каталогов Условно говоря, в исходном состоянии существование будет богаче,В дополнение к традиционным контроллерам,Это также помогло нам подготовить сценарии, промежуточное программное обеспечение и другие файлы и каталоги кода.,По сути, вы можете начать и использовать его напрямую.
Сначала давайте посмотрим, что находится в корневом каталоге.
Фактически, вы можете узнать функции этих каталогов по их именам, например app Каталог представляет собой конкретный код приложения. конфигурация Каталог, в котором находится Конфигурационный файл информациииз. существования В предыдущей статье мы упоминали, что если существование используется в виртуальной машине Laravel Если да, то необходимо использовать server.php Этот файл находится в корневом каталоге. Фактически этот файл загружается в корневой каталог. public/index.php этот файл.
bootstrap — это файл, который необходимо загрузить при запуске платформы. Обычно содержимое этого файла не изменяется. Этот каталог также содержит файлы каталогов, связанные с кэшем. База данных, очевидно, представляет собой контент, связанный с базой данных. public — это входной каталог нашей платформы. Здесь также можно разместить другие файлы ресурсов, например изображения, отображаемые напрямую, и статические файлы. ресурсы хранят представления и некомпилированные файлы ресурсов.
Каталог маршрутов — это каталог, в котором хранятся файлы маршрутизации. Этот каталог очень важен. Конечно, на самом деле очень важны файлы маршрутизации. По умолчанию он содержит файлы web.php, api.php,channels.php и console.php, которые соответственно представляют собой маршрутизацию веб-запросов по умолчанию, маршрутизацию запросов API, широковещательную рассылку событий регистрации и команды консольного сценария на основе закрытия.
Каталог хранилища используется для хранения различных файлов, созданных приложением, включая кэш, журналы и другую информацию. Каталог тестов содержит контент, связанный с автоматическим тестированием.
В этих каталогах давайте сосредоточимся на содержимом, содержащемся в каталоге приложения.
Каталог приложения — это наиболее часто используемый каталог при разработке наших приложений. Контроллеры, модели, промежуточное программное обеспечение и другой контент нашего приложения находятся в этом каталоге.
Каталог Console — это каталог сценариев командной строки, который мы написали, то есть все функции командной строки, которые можно настроить и запускать через php artisan, находятся в этом каталоге.
Исключения — это классы исключений, которые мы можем настроить. Модели хранят наши индивидуальные модели данных. В каталоге «Поставщики» хранятся поставщики услуг по умолчанию и некоторые поставщики услуг, которые мы можем настроить.
Далее идет каталог Http.
Контроллеры Само собой разумеется, здесь написаны все контроллеры. Промежуточное программное обеспечение содержит промежуточное программное обеспечение по умолчанию. Конечно, в этом каталоге также можно записать наше индивидуальное промежуточное программное обеспечение.
Kernel.php — это управляющий файл для запроса ядра. В этом файле мы можем определить запрошенное промежуточное программное обеспечение. Это также очень важный базовый документ. Мы объясним его подробно, когда узнаем в будущем.
О структуре Содержимое каталоговиза на самом деле указано выше. Далее давайте посмотрим на Конфигурационный. файл также находится в корневом каталоге config Содержимое каталога — это то, с чем нам часто приходится сталкиваться.
Фактически из этих Конфигурационный Их функции можно увидеть из названий файлов. существуют В следующей статье мы вскоре с ним соприкоснемся. database.php Этот файл, потому что в контенте, связанном с записью, нам все равно нужно просто подключиться к базе данных, чтобы испытать его.
В файле data.php вы можете не только определить информацию о подключаемой базе данных mysql, но также и подключаемую базу данных типа NoSQL (конфигурация подключения 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'),
]) : [],
],
проходить Конфигурационный код файла, мы видим, что вводится много информации env() полученное с помощью этой функции. Содержимое, полученное этой функцией, фактически находится в корневом каталоге. .env содержимое этого файла. открой это .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=
Здесь мы можем настроить информацию о подключении к базе данных в текущей среде. Каковы преимущества этой конфигурации?
независимыйиз Конфигурационный В таком виде легко реализовать центр конфигурации, а также легко развернуть тестовую среду и формальную среду отдельно. Обычно мы не используем этот .env вставить git или следуйте коду для загрузки. В формальной среде или тестовой среде настройка выполняется вручную или через центр конфигурации. В этом случае нам не нужно изменять исходный код, нам просто нужно использовать другой .env Конфигурационный файл может запускать один и тот же код в разных средах.
С помощью XDebug мы можем проследить, что метод env() вызывает компонент DotEnv Composer vlucas на нижнем уровне для чтения, записи и загрузки файлов типа 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(this); Этот раздел в цикле загрузит все bootstrappers Содержимое массива Содержимое этого массива находится в формате. laravel/framework/src/Illuminate/Foundation/Http/Kernel.php переменные класса в
// 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() Как объединить эти Конфигурационные fileсерединаiz информация записывается в $_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 В коде, который компонент вызывает туда и обратно, очень сложно найти окончательную реализацию.
Следующие статьи также будут выполнены таким же образом. Следует отметить, что все наши исходные коды находятся в каталоге поставщика, поэтому в некоторых статьях я не прописывал этот путь.