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

Я работаю над 2 приложениями прямо сейчас. Первый — это 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?

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

5

Решение

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

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

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

Тем не мение…

если вам нравится установка «папка общего поставщика», я бы предложил создать что-то вроде «обертки» или «супер» проекта, который будет выполнять роль хранилища контейнеров для двух других проектов. Проект обертки будет содержать 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

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

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

5

Другие решения

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

Например:

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

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

0

По вопросам рекламы [email protected]