Я работаю над 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?
Что я делаю неправильно? Я забыл что-то изменить?
Заранее спасибо.
Композитор работает на основе проекта.
Один проект — одна папка продавца. Нет, два проекта и одна «общая» папка вендора.
У нас был достаточно «общий» подход с использованием папки поставщика с 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
файл подпроекта.
Теперь также возможно настроить поведение автозагрузки подпроектов, зарегистрировав автозагрузчики в определенном порядке.
Исходя из ваших требований, и если единственное, что вам нужно / нужно разделить между несколькими проектами, — это каталог 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
Если вы точно не знаете, что все проекты определенно будут нуждаться в одних и тех же версиях ваших зависимостей, возможно, это плохой план.