Какова самая масштабируемая структура каталогов на основе PHP для большого сайта?

Код, который работает для меня.

export class AuthenticationService {

    user: Observable<firebase.User>;

    constructor(public afAuth: AngularFireAuth) {
        this.user = afAuth.authState;
    }

    login(){
        var provider = new firebase.auth.GoogleAuthProvider();
        provider.setCustomParameters({'hd': '<your domain>'});
        this.afAuth.auth.signInWithPopup(provider)
        .then(response => {
            let token = response.credential.accessToken;
            //Your code. Token is now available.
        })
    }
}
28
задан johnnietheblack 7 September 2009 в 04:25
поделиться

5 ответов

Это моя установка. Он отлично работал у меня для маленьких - очень больших проектов (включая социальную сеть).
Все эти папки будут находиться в моей основной папке приложения:

  • config - содержит пользовательские файлы конфигурации PHP.
  • css - содержит файлы CSS проекта.
  • helpers - содержит файлы-помощники (каждый файл представляет собой набор функций)
  • images - содержит изображения проекта.
  • js - содержит файлы Javascript проекта.
  • lib - содержит классы PHP, специфичные для проекта.
  • модулей - Моя платформа MVC позволяет упаковывать разделы сайта в модули.
    • блог - Пример модуля
      • контроллеры - содержат контроллеры для моделей модуля
      • - содержат модели для представлений модуля
      • - содержат представления для представлений модуля
  • - содержат представления, которые должны быть доступны глобально (верхний колонтитул страницы, нижний колонтитул , так далее)

Очевидно, что все каталоги могут содержать подпапки, в которых будут организованы ваши файлы. Например, в папке css могут быть подпапки с именами «web» и «mobile». Папка «images» может содержать папку «user_uploaded», которая затем может содержать «профиль». И, конечно же, вы можете добавлять папки по своему усмотрению. В одном проекте у меня есть папка под названием «uploaders», которая просто содержит автономные сценарии загрузки.

Я также использую удобные методы, которые помогают создавать имена файлов того, что я хочу загрузить. Например, мой loadView () будет искать файл представления в текущем каталоге модуля, или, если вы передаете необязательный аргумент $ module, он будет искать именно в папке этого модуля.

Надеюсь, это поможет.

24
ответ дан 28 November 2019 в 03:03
поделиться

Я использую codeigniter для малых и больших проектов. Его функция MVC умеренно хороша.

  • codeIgniter \ system \ application \ config: содержит все типы файлов конфигурации, такие как DB, Платежный шлюз, ftp config, маршруты и ...
  • codeIgniter \ system \ application \ models: contain всевозможные классы баз данных, вы должны создать подпапки в соответствии с вашими потребностями, я использовал клиенты, mailData, paymentModel, report, web-service и ....
  • codeIgniter \ system \ application \ views: содержат все виды файлов которые будут работать как выходные данные для клиентов, вы должны подумать о повторном использовании этих файлов, если это возможно. Как и в моделях, вам нужно было создать подпапку, такую ​​как администрирование, отчеты, электронная почта, email_template .....
  • codeIgniter \ system \ application \ controllers: это самая важная часть. Это поможет создать URL-адрес SEO, поэтому на этот раз вам следует быть более осторожными с вложенными папками. Вы можете создать подобное администрирование,
2
ответ дан 28 November 2019 в 03:03
поделиться

Для файлов ядра, которые включены: Approot / inc /

Функции и классы доступа к данным находятся в: Approot / dao /

Для сценариев JavaScript: Approot / scripts /

Для CSS: Approot / styles /

Для изображений: Approot / img /

Для статического содержимого (обычно для изображений профиля пользователя или загруженных изображений): Approot / static /

Для кешей: Approot / caches /

Для шаблонов или файлов просмотра: Approot / templates /

Файл всех страниц: Approot /

Структура из Samstyle PHP Framework


Ответ, который я разместил здесь, был датирован 2009 годом. С годами было опубликовано больше стандартов, включая PSR-0 , который охватывает тему структуры папок . У меня также есть новая (и я считаю, что она лучше) структура папок с Packfire Framework .

5
ответ дан 28 November 2019 в 03:03
поделиться

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

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

4
ответ дан 28 November 2019 в 03:03
поделиться

У вас должен быть один каталог в качестве корневого веб-каталога, в котором должны находиться только те файлы, которые вы хотите открыть для всего Интернета.

project/
 web/
  index.php
  css/
  js/
  images/
 config/
 lib/
  • web / - это корень, показываемый посетителям.
  • lib / - это папка библиотеки, в которой автозагрузка ищет файлы.

Вы можете добавить дополнительные подпапки в проект /, например, контроллер, модули, представление, помощник и т. Д. . Это зависит от вашего фреймворка.

РЕДАКТИРОВАТЬ:

Если вы используете композитор (что я рекомендую) и, возможно, npm с grunt и less, ваша файловая структура будет следующей:

project/
    web/
        js/
        css/
        images/
        index.php
    cli/
    config/
        config.php
    node_modules/
    src/
    test/
    vendor/
    composer.json
    composer.lock
    packages.json
  • web / содержит все ваши общедоступные файлы
  • cli / скрипты и программы, запускаемые из командной строки, НЕ в web
  • config / есть все ваши файлы конфигурации (в git вы игнорируете config.php и вместо этого имеете config.dist.php без имен пользователей, паролей, кодов проверки и префиксы / суффиксы таблиц и прочие "секреты" )
  • node_modules / содержит все файлы вашей библиотеки из npm (в git я предлагаю вам поместить это в подмодуль)
  • src имеет все ваши локальные файлы PHP в структуре psr4, настроенной для автозагрузки в composer.json
  • test / содержит все ваши модульные тесты для ваших классов src, настроенных в autload-dev в composer.json (не забудьте использовать composer install --no-dev в реальном времени, возможно, добавьте -o , если у вас не слишком много классов)
  • vendor имеет все ваши файлы библиотеки от composer и ONE AND ONLY autoload.php для включения в web / index.php и любые скрипты cli (в git я предлагаю вам игнорируйте эту папку поставщика)

Добавьте другие папки и файлы, которые требуются для вашего проекта.

Для развертывания используйте эту структуру:

/sites/project/ (project is your projectname)
    current (alias to current release folder releases/v1.1.0)
    previous (optional alias to previous release folder releases/v1.0.1)
    releases/
        v1.0.0/ (git checkout of tag v1.0.0)
        v1.0.1/ (git checkout of tag v1.0.1)
        v1.1.0/ (git checkout of tag v1.1.0)
    shared/ (has all your shared files and folders to be aliased in all releases - maybe something like GlusterFS)

Создайте сценарий развертывания. Примерно так:

Сначала сделайте резервную копию базы данных или скопируйте ее в новую базу данных, проверить репозиторий git в новую папку с тегом выпуска, получить все подмодули git, запустить composer install --no-dev, настроить любые псевдонимы для общих папок и файлов, таких как загруженные изображения и файлы конфигурации, сгенерировать js / css с grunt и менее или эквивалентными, укажите текущий псевдоним на новую папку с тегом, запустите скрипт обновления базы данных, перезапустите службы nginx / apache / fpm-php, запустите тесты, чтобы проверить, работает ли веб-сайт.

Имейте сценарий для возврата к предыдущей версии (или руководство, чтобы вы знали, что делать).

запустить тесты, чтобы проверить, работает ли сайт.

Имейте сценарий для возврата к предыдущей версии (или руководство, чтобы вы знали, что делать).

запустить тесты, чтобы проверить, работает ли сайт.

Имейте сценарий для возврата к предыдущей версии (или руководство, чтобы вы знали, что делать).

19
ответ дан 28 November 2019 в 03:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: