2014-04-28 3 views
2

Я создаю приложение в Symfony, которое использует библиотеку, которую я пишу одновременно.Как разработать библиотеки для symfony, сохраняя независимую структуру кода библиотеки

Пока мое приложение создается с помощью symfony, я хочу, чтобы библиотека компонентов была полностью независимой от структуры, поскольку ее необходимо повторно использовать приложениями, которые не обязательно написаны в symfony.

Поэтому у меня есть Symfony сверток, который интегрирует библиотеку (компонент)

Структура папок является следующим

src/MyVendor/ 
|-- Bundle 
| `-- MyComponentBundle 
|  |-- Controller 
|  |-- DependencyInjection 
|  |-- Resources 
|  | |-- config 
|  | `-- views 
|  |  `-- Default 
|  |-- Tests 
|   `-- Controller 
|    `-- MyObjectControllerTest.php 
|  `-- MyComponentBundle.php 
`-- Component 
    `-- MyComponent 
     |-- doc 
     |-- src 
      `-- MyObject.php 
     |-- test 
      `-- MyObjectTest.php 
     |-- .gitignore 
     |-- composer.json 
     |-- LICENSE 
     |-- README.md 
     `-- phpunit.xml.dist 

Вопросы:

  1. Is MyComponent структура каталогов правильно, как по стандартам автозагрузки PSR-x? Например, как я использую MyObject из библиотеки внутри пучка, то есть в MyObjectControllerTest.php

  2. Может MyObject находиться в пространстве имен MyVendor\MyComponent? Если нет, как мне изменить структуру каталогов, чтобы (1) я мог использовать это пространство имен и (2), чтобы он мог автоматически загружаться внутри MyObjectControllerTest.php, т. Е. new MyVendor\MyComponent\MyObject(); будет работать; Прямо сейчас я получаю PHP Fatal error: Class 'MyVendor\MyComponent\MyObject' not found in ...

  3. Не могли бы вы направить меня на интернет-ресурс, чтобы помочь мне опубликовать MyComponent на GitHub и сделать его доступным для Symfony (я предполагаю, что большинство, что включает в себя только создание composer.json правильно)

Спасибо

+0

Рассмотрит собирание простого компонента Symfony, такие как Yaml и следуя его структуре. – Cerad

+0

спасибо, я действительно смотрел на это, но сложность, с которой я сталкиваюсь, заключается в том, что с существующими компонентами Symfony я вижу, что структура начинается только с корня компонента, но не с структурой, в которой этот корень помещается во время разработки. Я имею в виду, что я вижу 'symfony \ symfony \ src \ Symfony \ Component \ Yaml' в папке' vendors', которая является опубликованной структурой dir, но я не вижу, как я мог бы добавить 'doc',' test' и 'src' для каждого компонента – scibuff

+1

composer.json позволяет указать структуру каталогов поставщиков. При разработке создайте свою структуру каталогов. В вашем случае у вас будет каталог MyVendor/Component с репозиторием Object под ним. Сначала это сбивает с толку, Wish, я могу указать вам на шаг за шагом учебник, но я не знаю. – Cerad

ответ

2
  1. Он совместим с PSR-х автопогрузчиков. Но ваши пространства имен должны быть надлежащим образом зарегистрированы (PSR-4, PSR-0).
  2. Вы должны создать правильную автозагрузку для использования своего компонента (например, using composer).
  3. Просто create a repo для компонента на GitHub, create вашего composer.json (или копировать/прошлое и изменить некоторые стороны один), представить свой пакет on packagist (просто вставить GitHub проект ссылки)
+1

Для частных репозиториев Satis (https://github.com/composer/satis) является заменой Packagist. – kix

+0

Спасибо, что многое проясняет. Я все еще не уверен, где мне нужно зарегистрировать пространство имен, пока компонент все еще находится в dev (т. Е. Не отправлен в packagelist). Я делаю это с помощью кода или composer.json с '" autoload ": {" psr-0: "{" MyVendor: "путь/в/src"}} ' – scibuff

+1

Лучше сделайте это с композитором, а также добавьте эту библиотеку к вашему набору как зависимости, используя композитор тоже. – Ziumin

Смежные вопросы