Symfony2-tworzenie własnego pakietu vendor bundle-projekt i strategia git
Rozważamy stworzenie własnego pakietu common
do mapowania encji i usług do użytku w kilku oddzielnych aplikacjach. Pakiet powinien być łatwy do modyfikacji, uruchomienia, włączenia i przetestowania. Wiem o najlepszych praktykach strukturyzowania pakietów , ale nie wiem, jakiej strategii użyć, jeśli chodzi o rozwój.
Czy powinniśmy utworzyć common
bundle jako cały projekt i zatwierdzić całe repozytorium na naszym serwerze git, czy lepiej uruchomić kontrolę źródła tylko dla roota common
bundle i wcisnąć tylko jego zawartość? Widzę takie podejście w pakietach dostępnych na github
, ale nie znam łatwego i wygodnego sposobu tworzenia pakietów w ten sposób.
3 answers
Utwórz nowy pusty projekt symfony
php composer.phar create-project symfony/framework-standard-edition demo/ 2.4.1
cd demo
Wygeneruj nowy pakiet
(na przykład src/Company/DemoBundle
)
php app/console generate:bundle
cd src/Company/DemoBundle/
Init your github repozytorium in 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
Dodaj kompozytora.plik json
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"
}
}
}
Teraz masz strukturę bazową pakietu
Użyj go w innym projekcie
Kompozytor.json:
[...]
"require" : {
[...]
"company/demobundle" : "dev-master"
},
"repositories" : [{
"type" : "vcs",
"url" : "https://github.com/Company/DemoBundle.git"
}],
[...]
Do:
curl -sS https://getcomposer.org/installer | php
php composer.phar update company/demobundle
App / AppKernel:
new Company\DemoBundle\CompanyDemoBundle(),
Pracuj nad tym
- możesz klonować Twój DemoBundle w folderze
src/Company
, a następnie ręcznie go zainstaluj - możesz użyć dowiązania symbolicznego
Podsumowanie
Możesz rozwijać i testować swój pakiet w pierwszym projekcie i używać go z github i composer w drugim projekcie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-06 02:45:48
Ważne jest, aby wiedzieć, że możesz zaangażować się w repo od / dostawcy. Rzeczywiście, composer tworzy drugi pilot o nazwie "composer" dla każdego pakietu (lub pakietu), który odwołuje się do repo pakietu, aby można było nad nim pracować w kontekście roboczym.
Dobrą praktyką jest więc zarejestrowanie pakietu w programie composer.json dla wszystkich twoich projektów i commit z twojego /vendor/MyCompany/MyBundle
, z dowolnego projektu.
git remote -v
z dowolnego pakietu u dostawcy.
The bad praktyką byłoby rozważenie pakietu jako oddzielnego projektu i dodanie do niego dowiązań symbolicznych. Głównym powodem, dla którego jest to zła praktyka, jest to, że nie będziesz w stanie zadeklarować zależności z pakietem. Ponadto będziesz miał pewne trudności z wdrożeniem swoich projektów.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-06 03:08:50
W Symfony4 polecenie {[3] } nie jest już dostępne. Zamiast tego możesz śledzić ten samouczek.
Najpierw Utwórz projekt za pomocą:
composer create-project symfony/website-skeleton my-project
Następnie utwórz katalog my-project/lib/AcmeFooBundle/src
. Tutaj będzie żyć Twój Pakiet. Przestrzeń nazw dla tego katalogu będzie Acme\AcmeFooBundle
, więc jeśli utworzysz klasę usług w lib/AcmeFooBundle/src/Service/Foo.php
, jej przestrzeń nazw będzie Acme\AcmeFooBundle\Service
.
Teraz musimy powiedzieć autoloaderowi composera, aby szukał nowych klas w tym nowym katalogu, więc musimy edytować composer.json
autoload
sekcja:
"autoload": {
"psr-4": {
"Acme\\AcmeFooBundle\\": "lib/AcmeFooBundle/src/",
}
},
I uruchomić composer dump-autoload
.
Teraz wystarczy dodać klasę pakietu do config/bundles.php
:
return [
...
Acme\AcmeFooBundle\AcmeFooBundle::class => ['all' => true],
];
I dependency injection do załadowania konfiguracji z twojego pakietu.
Jeśli chcesz sprawdzić swoje usługi przed dodaniem dependency injection, możesz je autowireować pod adresemconfig/services.yml
:
services:
...
Acme\AcmeFooBundle\Services\Foo: ~
To wszystko. Postępuj zgodnie z najlepszymi praktykami i kontynuuj kodowanie.
PS: opublikowałem post z kilkoma wskazówkami dotyczącymi tworzenia Symfony reusable wiązki .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-16 08:22:32