Структуры папок Laravel


Часто я сталкиваюсь с проблемами при принятии решения о том, где размещать папки для ресурсов в папке app\.

Где я должен разместить такие вещи, как model observers и validators и form macros и repositories.... в настоящее время я делаю следующее

\app
   \models
   \controllers
   \repositories
   \observers
   \interfaces
   \validators 
   \views

Хотя я вижу, что некоторые люди делают следующее:

\app
   \models
   \controllers
   \views
   \YourAppNameHere
      \Services
         \validators
         \...

Я не понимаю причины папки \Acme, когда она совпадает с фактическим приложением?

Author: AndrewMcLagan, 2014-01-27

3 answers

Лучший способ освоить структуру папок Laravel - это рассматривать каталог приложения как интерфейс фреймворка. Если вы взглянете на репозиторий git, вы увидите, что они разделены - вы можете клонировать основную библиотеку и вы можете клонировать приложение laravel в одиночку. Приложение с его вложенными папками представляет собой лишь один из способов использования фреймворка. Конечно, он разработан с учетом лучших практик. Проверьте также каталог core framework тесты - там Laravel разработчики относились к библиотеке как к "безголовой" - без приложения. Для меня это было все, что мне нужно, чтобы понять Ларавель.

Таким образом, вы можете изменять существующую структуру, но имейте в виду, что некоторые изменения требуют от вас создания дампа-автоматической загрузки - в основном из-за пространств имен.

 8
Author: carousel, 2014-01-27 15:51:43

По большому счету, 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';
 7
Author: mikedugan, 2014-01-27 11:34:08

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

 1
Author: Eddy Ferreira, 2014-01-27 11:23:58