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.

Author: Darryl Hein, 2014-02-03

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.

 171
Author: VBee,
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.

Jako dowód, po prostu uruchom 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.

 16
Author: flouflou2000,
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 adresem config/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 .

 2
Author: Manolo,
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