2014-04-22 2 views
2

Проект, над которым я работаю, требует использования PHP SDK от нескольких сторонних сторон. Два из них - веб-службы Amazon и клиент Google API (для Google+), и оба из них используют Composer для управления своими файлами/зависимостями. Я не уверен, как лучше всего настроить код/​​структуру мудрый, потому что мне не нужны оба AWS и Google, загруженные вместе. Мне может понадобиться AWS в одной области, а Google - в другой, поэтому я не хочу просто загружать все файлы каждый раз и получать дополнительные накладные расходы из библиотек, которые мне не нужны. Сейчас я структура создана так:PHP Composer - Как работать с несколькими поставщиками?

  • awscode.php
  • googlecode.php
  • ЛИЭС
    • composer.json
    • composer.lock
    • поставщика
      • autoload.php
      • AWS
      • Google

Итак, все Composer родственный в общем файле composer.json, и все файлы поставщика в одном каталоге производителя. Но, похоже, я не могу найти способ просто загрузить AWS. Он хочет, чтобы я использовал autoload.php из того, что я могу сказать, что, похоже, хочет загрузить все.

Нужно ли мне настраивать его больше, если я хочу контролировать каждую библиотеку?

  • awscode.php
  • googlecode.php
  • ЛИЭС
    • AWS
      • composer.json
      • composer.lock
      • поставщика
        • autoload.php
        • AWS
    • Google
      • composer.json
      • composer.lock
      • поставщик
        • автозагрузку.PHP
        • Google

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

+0

Вы уверены, что вы все еще не можете получить пакеты из разных каталогов поставщиков? Я просто включил autoload.php из обоих каталогов, и он отлично работает со мной. – Kirby

ответ

2

При использовании Composer он загружает классы только тогда, когда они действительно вызываются в вашем коде. Насколько мне известно, это использует PHP spl_autoload_register.

Так что в ответ на ваш вопрос не будет значительных дополнительных накладных расходов (если они есть).

+0

О, хорошо. Поэтому просто подтверждаем, что способ, которым я в настоящее время настроен (первая иерархия), является лучшим способом сделать это, и Composer будет загружать только то, что на самом деле нужно, только когда эти классы вызываются? – MattD

+1

В идеале каталог composer.json, composer.lock и vendor должен быть в корне вашего проекта, но я предполагаю, что это также зависит от предпочтений. Но да, первый способ лучше. –

+1

Иногда это может быть немного запутанным и неудобным, чтобы заставить композитора работать в первый раз, но в конечном итоге это очень поможет. Особенно при получении обновлений для библиотек в будущем. –

1

Автозагрузка означает, что файл, определяющий класс, считывается при первом использовании этого класса.

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

Смежные вопросы