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


Сейчас я работаю над 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?

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

Author: r3m4k3, 2015-05-02

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 подпроекта.

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

 5
Author: Jens A. Koch, 2015-05-04 22:24:31

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

Например:

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
Author: Abdou Tahiri, 2017-07-13 10:03:16