2014-04-28 1 views
2

Je crée une application dans Symfony qui utilise une bibliothèque que j'écris en même temps. Pendant que mon application est en cours de construction avec symfony, je veux que la bibliothèque de composants soit complètement indépendante du framework car elle doit être réutilisable par des applications qui ne sont pas nécessairement écrites dans symfony.Comment développer des bibliothèques pour symfony tout en gardant le cadre de code de bibliothèque indépendant

J'ai donc un faisceau de symfony qui intègre la bibliothèque (le composant)

La structure du dossier est suit

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 

Questions:

  1. Est-MyComponent structure de répertoire correct comme selon les normes de chargement automatique du PSR-x? Par exemple, comment puis-je utiliser MyObject de la bibliothèque à l'intérieur du paquet, à savoir dans MyObjectControllerTest.php

  2. MyObject peut résider dans l'espace de noms MyVendor\MyComponent? Sinon, comment dois-je modifier la structure du répertoire pour que (1) je puisse utiliser cet espace de noms, et (2) pour qu'il puisse être chargé automatiquement à l'intérieur MyObjectControllerTest.php, c'est-à-dire new MyVendor\MyComponent\MyObject(); fonctionnera; en ce moment je suis en train de PHP Fatal error: Class 'MyVendor\MyComponent\MyObject' not found in ...

  3. Pourriez-vous s'il vous plaît me diriger vers une ressource en ligne pour me aider à publier MyComponent sur github et le rendre disponible à symfony (je devine la plupart d'entre qui implique la mise en place juste composer.json correctement)

Merci

+0

Tenir compte de choisir un composant simple Symfony tel que Yaml et suivant sa structure. – Cerad

+0

merci, je l'ai vu mais la difficulté que j'ai est qu'avec les composants Symfony existants je vois que la structure commence seulement avec la racine du composant, mais pas la structure où cette racine est placée en cours de développement. Je veux dire que dans je vois symfony \ symfony \ Symfony \ Component \ Yaml dans le dossier 'vendeurs 'qui est la structure dir publiée, mais je ne vois pas comment je pourrais ajouter un' doc', 'test' et le dossier 'src' pour chaque composant – scibuff

+1

composer.json vous permet de spécifier la structure du répertoire des fournisseurs. Lors du développement, faites vous propre structure de répertoire. Dans votre cas, vous aurez un répertoire MyVendor/Component avec le dépôt Object en dessous. Il est déroutant au début, je voudrais pouvoir vous diriger vers un tutoriel étape par étape, mais je ne connais pas. – Cerad

Répondre

2
  1. Il est compatible avec les chargeurs automatiques PSR-x. Mais vos espaces de noms doivent être correctement enregistrés (PSR-4, PSR-0).
  2. Vous devez créer un chargement automatique approprié pour utiliser votre composant (using composer, par exemple).
  3. Juste create a repo pour votre composant sur github, create votre composer.json (ou copier/coller et modifier un certain côté un), veuillez présenter votre on packagist (il suffit d'insérer github lien de projet)
+1

Pour les repos privés, Satis (https://github.com/composer/satis) est un remplacement Packagist drop-in. – kix

+0

Merci qui clarifie beaucoup. Je ne suis toujours pas sûr de l'endroit où j'ai besoin d'enregistrer l'espace de noms alors que le composant est toujours en développement (c'est-à-dire qu'il n'est pas soumis à la liste de paquets). Est-ce que je fais cela avec du code, ou composer.json avec le '' autoload ": {" psr-0: "{" MyVendor: "chemin/to/src"}} ' – scibuff

+1

Mieux le faire avec compositeur et aussi ajouter cette lib à votre bundle en tant que dépendance en utilisant le compositeur aussi. – Ziumin

Questions connexes