Один общий поставщик с двумя проектами

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

Поэтому моя структура будет примерно такой:

project1/ project2/ shared_vendor/ 

Я читал об этом. Я изменил переменную загрузчика app/autoload.php :

 $loader = require __DIR__.'/../vendor/autoload.php'; 

чтобы:

 $loader = require __DIR__.'/../../vendor/autoload.php'; 

И я также изменил vendor-dir в своем composer.json :

  "config": { "bin-dir": "bin", "vendor-dir": "vendor" }, 

чтобы:

  "config": { "bin-dir": "bin", "vendor-dir": "/../vendor" }, 

И после этого я получаю эту ошибку:

 ClassNotFoundException in AppKernel.php line 20: Attempted to load class "CmsUserBundle" from namespace "Cms\UserBundle". Did you forget a "use" statement for another namespace? 

Что я делаю не так? Я забыл что-то изменить? Заранее спасибо.

Композитор работает на основе каждого проекта.

Один проект – одна папка поставщика. Нет, два проекта и одна «общая» папка поставщика.

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

Так или иначе…

если вам нравится настройка «shared vendor folder», я бы предложил создать что-то вроде «обертки» или «супер» проекта, который действует как контейнерный репозиторий для двух других проектов. Проект оболочки будет содержать файл composer.json с требованиями для обоих (!) Проектов. Это означает, что вы работаете с одним и тем же набором зависимостей в обоих подпроектах.

Это позволяет определить требования для обоих подпроектов (cms и shop) в репо «обертки». В принципе, я предлагаю следующую структуру:

 |-container-project +-CMS |-src +-tests +-Shop |-src +-tests +-vendors // contains dependencies for both projects (CMS + Shop) |-composer.json // define requirements for both projects - |-container-project +-CMS |-src +-tests +-Shop |-src +-tests +-vendors // contains dependencies for both projects (CMS + Shop) |-composer.json // define requirements for both projects - |-container-project +-CMS |-src +-tests +-Shop |-src +-tests +-vendors // contains dependencies for both projects (CMS + Shop) |-composer.json // define requirements for both projects 

Эта настройка позволяет также вводить файлы composer.json для подпроектов. Вам просто нужно передать требования из файла composer.json суперпроекта в файл composer.json подпроекта.

Теперь также можно настроить поведение автозагрузок подпроектов, зарегистрировав автозагрузчики в определенном порядке.

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

Например:

 cd /var/www/SiteA composer install # git clone new project into /var/www/SiteB cd ../SiteB # If vendor directory is already there, delete it: rm -rf vendor # create symlink to Site A's vendor directory ln -s /var/www/SiteA/vendor 

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