Один общий поставщик с двумя проектами
Сейчас я работаю над 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?
Что я делаю не так? Я что-то забыл изменить? Заранее благодарю.
2 answers
Композитор работает на основе каждого проекта.
Один проект - одна папка поставщика. Нет, два проекта и одна "общая" папка поставщика.
У нас был подход "общей" папки поставщика с PEAR достаточно долго, и это просто не сработало. Управление различными требованиями проекта с помощью глобальной папки поставщиков - это сложная задача, потому что у каждого проекта разные требования.
В любом случае...
Если вам нравится настройка "общая папка поставщика", я бы предложил создать что-нибудь как "оболочка" или "супер" проект, который действует как хранилище контейнеров для двух других проектов. Проект-оболочка будет содержать файл composer.json
с требованиями для обоих (!) проектов. Это означает, что вы работаете с одним и тем же набором зависимостей в обоих подпроектах.
Это позволяет определить требования для обоих подпроектов (cms и магазин) в репо "обертка". В принципе, я предлагаю следующую структуру:
|-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
Если вы не знаете наверняка, что всем проектам определенно понадобятся точно такие же версии ваших зависимостей, это, возможно, не очень хороший план.