Сейчас я работаю над двумя приложениями. Первый – это 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
Если вы точно не знаете, что всем проектам определенно понадобятся точно такие же версии ваших зависимостей, возможно, это не очень хороший план.