[Laravel Series 2.2] Структура и конфигурация каталогов Laravel
[Laravel Series 2.2] Структура и конфигурация каталогов Laravel

Структура и конфигурация каталогов Laravel

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 здесь.

Язык кода:javascript
копировать
'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 Информация о конфигурации в этой форме.

Язык кода:javascript
копировать
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.

Для загрузки, когда программа запущена, мы загрузим ее с помощью следующего кода.

Язык кода:javascript
копировать
// 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 переменные класса в

Язык кода:javascript
копировать
// 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 также будет загружена в систему в виде общих переменных среды.

Язык кода:javascript
копировать
// laravel/framework/src/Illuminate/Foundation/Bootstrap/LoadEnvironmentVariables.php
$this->createDotenv($app)->safeLoad();

LoadEnvironmentVariables.php будет введен через приведенный выше код. DotEnv В компоненте используйте следующий метод: Конфигурационный. файл, связанный с информацией.

Язык кода:javascript
копировать
// vlucas/phpdotenv/src/Dotenv.php
create() 

// vlucas/phpdotenv/src/Loader/Loader.php 
load()

наконец прошло ServerConstAdapter.php в файле write() Как объединить эти Конфигурационные fileсерединаiz информация записывается в $_SERVER в массиве глобальных переменных.

Язык кода:javascript
копировать
//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 данные в.

Язык кода:javascript
копировать
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 В коде, который компонент вызывает туда и обратно, очень сложно найти окончательную реализацию.

Следующие статьи также будут выполнены таким же образом. Следует отметить, что все наши исходные коды находятся в каталоге поставщика, поэтому в некоторых статьях я не прописывал этот путь.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose