Сейчас я работаю над двумя приложениями. Первый - это 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
Эта настройка позволяет вводить файлы 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 vendor directory
ln -s /var/www/SiteA/vendor
Если вы точно не знаете, что всем проектам, безусловно, понадобятся точно такие же версии ваших зависимостей, возможно, это не хороший план.
project_1/src/
или вshared_vendor/
?