Структуры папок Laravel
Часто я сталкиваюсь с проблемами при принятии решения о том, где размещать папки для ресурсов в папке app\
.
Где я должен разместить такие вещи, как model observers
и validators
и form macros
и repositories
.... в настоящее время я делаю следующее
\app
\models
\controllers
\repositories
\observers
\interfaces
\validators
\views
Хотя я вижу, что некоторые люди делают следующее:
\app
\models
\controllers
\views
\YourAppNameHere
\Services
\validators
\...
Я не понимаю причины папки \Acme, когда она совпадает с фактическим приложением?
3 answers
Лучший способ освоить структуру папок Laravel - это рассматривать каталог приложения как интерфейс фреймворка. Если вы взглянете на репозиторий git, вы увидите, что они разделены - вы можете клонировать основную библиотеку и вы можете клонировать приложение laravel в одиночку. Приложение с его вложенными папками представляет собой лишь один из способов использования фреймворка. Конечно, он разработан с учетом лучших практик. Проверьте также каталог core framework тесты - там Laravel разработчики относились к библиотеке как к "безголовой" - без приложения. Для меня это было все, что мне нужно, чтобы понять Ларавель.
Таким образом, вы можете изменять существующую структуру, но имейте в виду, что некоторые изменения требуют от вас создания дампа-автоматической загрузки - в основном из-за пространств имен.
По большому счету, Laravel может быть структурирован так, как вам больше подходит. Некоторые люди предпочитают архитектуру по умолчанию, в то время как другие предпочитают архитектуру на основе домена.
Оба моих текущих проекта отклоняются от этого, используя что-то вроде:
/app
/database
/controllers
/bin
/views
/config
/storage
Я сохраняю большую часть своих пользовательских функций у поставщика услуг, хотя у меня есть некоторые общие помощники в bin/
вместе с моими маршрутами и фильтрами.
Вы можете делать все, что хотите, просто убедитесь, что вы соответственно обновите свои composer.json
и app/start/global.php
, чтобы убедиться, что соответствующие классы загружены автоматически. И убедитесь, что вы все сделали правильно!
Ниже приведен пример соответствующих разделов моего composer.json и global.php просто для идеи:
composer.json
:
"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/database/models",
"app/database/migrations",
"app/database/seeds"
]
},
app/start/global.php
:
ClassLoader::addDirectories(array(
app_path().'/commands',
app_path().'/controllers',
app_path().'/bin',
app_path().'/database/models',
app_path().'/database/seeds',
));
require app_path().'/bin/filters.php';
require app_path().'/bin/helpers.php';
require app_path().'/bin/events.php';
Короче говоря, это полностью зависит от предпочтений и от того, как вы и ваша команда считаете, что это лучше всего для удобства чтения, При этом хорошо иметь согласованность во всех ваших проектах.