Erstellen Sie ein neues leeres Symfony-Projekt
php composer.phar create-project symfony/framework-standard-edition demo/ 2.4.1
cd demo
Generieren Sie ein neues Bundle
(zum Beispiel src/Company/DemoBundle
)
php app/console generate:bundle
cd src/Company/DemoBundle/
Initialisieren Sie Ihr Github-Repository in src/Company/DemoBundle
git init
touch README.md
git add .
git commit -m "initial commit"
git remote add origin https:
git push -u origin master
Fügen Sie eine composer.json-Datei hinzu
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"
}
}
}
Jetzt haben Sie die Grundstruktur Ihres Bundles
Verwenden Sie es in einem anderen Projekt
composer.json:
[...]
"require" : {
[...]
"company/demobundle" : "dev-master"
},
"repositories" : [{
"type" : "vcs",
"url" : "https://github.com/Company/DemoBundle.git"
}],
[...]
Machen:
curl -sS https:
php composer.phar update company/demobundle
App / AppKernel:
new Company\DemoBundle\CompanyDemoBundle(),
Arbeite daran
- Sie können Ihr DemoBundle in den
src/Company
Ordner klonen und dann manuell installieren
- Sie können symlink verwenden
Fazit
Sie können Ihr Bundle in Ihrem ersten Projekt entwickeln und testen und es mit Github und Composer in Ihrem zweiten Projekt verwenden.
sf2
Projekt undclone
dieses Repo erstellensrc/
? Was ist mit demcomposer.lock
Hauptprojekt und dessen Verwendung, um die gleiche Version jeder Bibliothek im gesamten Team sicherzustellen? Wenn Sie einen guten und effektiven Weg kennen, fügen Sie ihn bitte Ihrer Antwort hinzu. Vielen Dank! :)Ein wichtiger Punkt, den Sie wissen sollten, ist, dass Sie sich vom / vendor in Ihr Repo eintragen können. In der Tat erstellt Composer für jedes Bundle (oder Paket) eine zweite Fernbedienung namens "Composer", die auf das Repo des Pakets verweist, damit Sie in einem Arbeitskontext daran arbeiten können. Daher empfiehlt es sich, Ihr Paket für alle Ihre Projekte in Ihrer composer.json zu registrieren und
/vendor/MyCompany/MyBundle
von jedem Projekt aus zu verpflichten.Führen Sie als Beweis einfach ein
git remote -v
beliebiges Bundle in Ihrem Anbieter aus.Die schlechte Praxis wäre, Ihr Bundle als separates Projekt zu betrachten und Symlinks damit zu haben. Der Hauptgrund, warum dies die schlechte Praxis ist, ist, dass Sie keine Abhängigkeiten mit Ihrem Bundle deklarieren können. Darüber hinaus haben Sie einige Schwierigkeiten bei der Bereitstellung Ihrer Projekte.
quelle
/src
oder im/vendor
Verzeichnis generieren . Wenn ich dieses Bundle in ein anderes Projekt/vendor
einbinde, wird es dort sein, aber wo sollte ich sie zu Beginn generieren?composer update
. Jetzt sollten Sie Ihr leeres Bundle im Vendor-Ordner sehen und können darin arbeiten. Wenn Sie möchten, dass Ihr Bundle öffentlich ist, fügen Sie es Packagist hinzu.In Symfony4 ist der
generate:bundle
Befehl nicht mehr verfügbar. Stattdessen können Sie diesem Tutorial folgen .Erstellen Sie zunächst ein Projekt mit:
composer create-project symfony/website-skeleton my-project
Erstellen Sie dann ein
my-project/lib/AcmeFooBundle/src
Verzeichnis. Hier wird dein Bundle leben. Der Namespace für dieses Verzeichnis lautet.Acme\AcmeFooBundle
Wenn Sie also eine Serviceklasse unter erstellenlib/AcmeFooBundle/src/Service/Foo.php
, lautet der NamespaceAcme\AcmeFooBundle\Service
.Jetzt müssen wir den Composer Autoloader anweisen, in diesem neuen Verzeichnis nach neuen Klassen zu suchen. Daher müssen wir den folgenden
composer.json
autoload
Abschnitt bearbeiten :"autoload": { "psr-4": { "Acme\\AcmeFooBundle\\": "lib/AcmeFooBundle/src/", } },
und laufen
composer dump-autoload
.Jetzt müssen Sie nur noch Ihre Bundle-Klasse hinzufügen zu
config/bundles.php
:return [ ... Acme\AcmeFooBundle\AcmeFooBundle::class => ['all' => true], ];
und Abhängigkeitsinjektion zum Laden der Konfiguration aus Ihrem Bundle.
Wenn Sie Ihre Dienste überprüfen möchten, bevor Sie die Abhängigkeitsinjektion hinzufügen, können Sie sie einfach automatisch verdrahten unter
config/services.yml
:Das ist alles. Befolgen Sie die Best Practices und codieren Sie weiter.
PS: Ich habe einen Beitrag mit einigen Tipps zur Entwicklung wiederverwendbarer Symfony-Bundles veröffentlicht .
quelle