Nous envisageons de créer notre propre ensemble common
pour le mappage des entités et des services à utiliser dans quelques applications distinctes. Un paquet doit être facile à modifier, exécuter, inclure et tester. Je connais Meilleures pratiques pour la structuration des ensembles , mais je ne sais pas quelle stratégie git
utiliser pour le développement.
Devrions-nous créer common
bundle en tant que projet entier et valider le référentiel entier sur notre serveur git, ou vaut-il mieux démarrer le contrôle de code source uniquement pour la racine de common
bundle et afficher uniquement son contenu? Je vois cette approche dans les bundles disponibles sur github
, mais je ne connais pas le moyen facile et confortable de développer des bundles de cette façon.
php composer.phar create-project symfony/framework-standard-edition demo/ 2.4.1
cd demo
(par exemple src/Company/DemoBundle
)
php app/console generate:bundle
cd src/Company/DemoBundle/
src/Company/DemoBundle
git init
touch README.md
git add .
git commit -m "initial commit"
git remote add Origin https://github.com/YourAccount/DemoBundle.git
git Push -u Origin master
src/Company/DemoBundle/composer.json
:
{
"name" : "company/demobundle",
"description" : "A demo bundle",
"type" : "symfony-bundle",
"authors" : [{
"name" : "demo",
"email" : "[email protected]"
}],
"keywords" : [
"demo bundle"
],
"license" : [
"MIT"
],
"require" : {
},
"autoload" : {
"psr-0" : {
"Company\\DemoBundle" : ""
}
},
"target-dir" : "Company/DemoBundle",
"repositories" : [{
}],
"extra" : {
"branch-alias" : {
"dev-master" : "some_version-dev"
}
}
}
Maintenant vous avez la structure de base de votre paquet
composer.json:
[...]
"require" : {
[...]
"company/demobundle" : "dev-master"
},
"repositories" : [{
"type" : "vcs",
"url" : "https://github.com/Company/DemoBundle.git"
}],
[...]
Faire:
curl -sS https://getcomposer.org/installer | php
php composer.phar update company/demobundle
app/AppKernel:
new Company\DemoBundle\CompanyDemoBundle(),
src/Company
dossier, puis installez-le manuellementVous pouvez développer et tester votre bundle dans votre premier projet et l'utiliser avec github et composer dans votre second projet.
Un point important à savoir est que vous pouvez vous engager dans votre référentiel à partir du répertoire/vendor. En effet, composer crée une deuxième télécommande appelée "composeur" pour chaque bundle (ou package) qui fait référence au référentiel du package, afin que vous puissiez travailler dessus dans un contexte de travail. La pratique consiste à enregistrer votre paquet dans votre composer.json pour tous vos projets et à valider à partir de votre /vendor/MyCompany/MyBundle
, de tout projet.
Pour preuve, lancez git remote -v
de n’importe quel lot chez votre fournisseur.
La mauvaise pratique serait de considérer votre bundle comme un projet séparé et d’avoir des liens symboliques avec celui-ci. La principale raison pour laquelle il s’agit d’une mauvaise pratique est que vous ne pourrez pas déclarer de dépendances avec votre bundle. De plus, vous aurez des difficultés avec le déploiement de vos projets.
Dans Symfony4, la commande generate:bundle
N'est plus disponible. Au lieu de cela, vous pouvez suivre ce tutoriel .
Commencez par créer un projet avec:
composer create-project symfony/website-skeleton my-project
Ensuite, créez un répertoire my-project/lib/AcmeFooBundle/src
. Ici vivra votre paquet. L'espace de noms pour ce répertoire sera Acme\AcmeFooBundle
. Ainsi, si vous créez une classe de service à lib/AcmeFooBundle/src/Service/Foo.php
, Son espace de noms sera Acme\AcmeFooBundle\Service
.
Maintenant, nous devons dire à composer l'autoloader de rechercher de nouvelles classes dans ce nouveau répertoire. Nous devons donc éditer composer.json
_ autoload
section:
"autoload": {
"psr-4": {
"Acme\\AcmeFooBundle\\": "lib/AcmeFooBundle/src/",
}
},
et lancez composer dump-autoload
.
Il ne vous reste plus qu'à ajouter votre classe d'ensembles à config/bundles.php
:
return [
...
Acme\AcmeFooBundle\AcmeFooBundle::class => ['all' => true],
];
et injection de dépendance pour charger la configuration à partir de votre bundle.
Si vous souhaitez vérifier vos services avant d'ajouter l'injection de dépendance, vous pouvez simplement les autoriser via config/services.yml
:
services:
...
Acme\AcmeFooBundle\Services\Foo: ~
C'est tout. Suivez meilleures pratiques et continuez à coder.
PS: J'ai publié un article avec quelques astuces pour développer des bundles réutilisables Symfony .