Vamos falar sobre como parar a copiar e colar entre projetos e transferir o código para um pacote reutilizável de plug-in do symfony 5. Uma série de artigos que resumem minha experiência com pacotes configuráveis levará, na prática, a criação de um pacote mínimo e a refatoração de um aplicativo demo para testes e o ciclo de lançamento de pacotes.
Na primeira parte:
- Por que os pacotes são necessários?
- Projeto de exemplo: calendário
- Personalize o ambiente: 2 maneiras de desenvolver
- Crie um pacote mínimo
- Conectando um Pacote Configurável a um Projeto
O que é um pacote e por que é necessário?
Você precisará do Symfony Bundle então (e somente então) quando se cansar de copiar o código do projeto para o projeto e pensar em reutilizá-lo. Cedo ou tarde, chega-se à conclusão de que é mais conveniente isolar o código em um plug-in reutilizável. Pacote Symfony - este é um módulo do ecossistema Symfony.
O pacote é um pacote de código PHP reutilizável em esteróides Symfony Framework.
Os pacotes diferem dos pacotes PHP regulares usando componentes e convenções geralmente aceitas que simplificam a integração com um aplicativo Symfony. Seguindo as convenções de nomenclatura específicas do ecossistema e as estruturas de código, os pacotes configuráveis podem se conectar, configurar e expandir automaticamente no aplicativo host Symfony. Pacotes configuráveis se conectam ao projeto através do gerenciador de dependências composer.
, — . , DDD- .
Example Project: Calendar
.

.
, . . , . - , .
, 10 .
: .
, , 12 .
, .
, , , . , , , composer update.
.
README.md .
:
.
, ?
— , File -> New... -> Symfony Project. -, .
2 :
, Symfony . , .
, . , ./bundles.
, .
./bundles CalendarBundle,
:
src/CalendarBundle.php
composer.json
2 !
composer.json
composer.json :
{
"name": "bravik/calendar-bundle",
"version": "0.1.0",
"type": "symfony-bundle",
"description": "Symfony bundles tutorial example project",
"license": "proprietary",
"require": {
"php": "^7.3"
},
"require-dev": {
},
"config": {
"sort-packages": true
},
"autoload": {
"psr-4": {
"bravik\\CalendarBundle\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"bravik\\CalendarBundle\\Tests\\": "tests/"
}
},
"scripts": {
"test" : "./vendor/bin/simple-phpunit"
},
"extra": {
"symfony": {
"allow-contrib": false,
"require": "5.0.*"
}
}
}
:
"name": "bravik/calendar-bundle",
"description": "Health check bundle",
. . composer, vendor/bravik/calendar-bundle
"type": "symfony-bundle"
Symfony, . composer, — Symfony Flex, — -, ( bundles.php), "".
— Symfony Flex, , .
"version": "0.1.0",
. composer . .
"autoload": {
"psr-4": {
"bravik\\CalendarBundle\\": "src"
}
},
"autoload-dev": {
"psr-4": {
"bravik\\CalendarBundle\\Tests\\": "tests"
}
},
composer. <VendorName>/<CategoryName>/<BundleName>Bundle.
composer, bravik\\CalendarBundle ./src composer.json . -, , use <BundleNamespace>/<BundleClass>.
dev-. .
"require": {
"php": "^7.3"
},
"require-dev": {},
require require-dev prod dev . - . composer . php .
.
./src CalendarBundle.php :
<?php
namespace bravik\CalendarBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class CalendarBundle extends Bundle
{
}
. .
: <BundleName>Bundle.php, — Bundle. , Symfony , ( ).
,
.
bravik\CalendarBundle, composer.json. .
-
composer :
composer require bravik/calendar-bundle
, composer : .
, repositories composer.json .
, bundles/CalendarBundle:
"repositories": [
{
"type" : "path",
"url" : "./bundles/CalendarBundle"
}
],
vendor , bravik/calendar-bundle, . vendors, .
, git- :
"repositories": [
{
"type" : "vcs",
"url" : "git@bitbucket.org:bravik/calendarbundle.git"
}
],
composer git- vendors/bravik/calendar-bundle.
composer.
composer require bravik/calendar-bundle composer.json , . , config/bundles.php:
<?php
return [
bravik\CalendarBundle\CalendarBundle::class => ['all' => true],
];
, !
-, ./bundles .gitignore , bundles/CalendarBundle : composer init. , .
, " " - - , .
, .
- Symfony 2 :
composer.json MyBundle. - - IDE GIT-, composer.
- , .
- , .
Example Project 1-bundle-mockup.
, , , DI-.
:
Parte 1. O pacote mínimo
Parte 2. Retiramos o código e os modelos no pacote
Parte 3. Integração do pacote com o host: modelos, estilos, JS
Parte 4. Interface para expandir o pacote
Parte 5. Parâmetros e configuração
Parte 6. Teste, microaplicação dentro do pacote
Parte 7 Ciclo de lançamento, instalação e atualização