Como reutilizar código com pacotes symfony 5? Parte 1. Pacote Mínimo

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

Conteúdo da Série

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- .


KnpMenuBundle

Symfony: KnpMenuBundle.


, . , .


, "" , Symfony . - () , PHP-, Composer.


Example Project: Calendar


.



.


, . . , . - , .


, 10 .
: .
, , 12 .


, .


, , , . , , , composer update.


.


README.md .


:


  • Event
  • 2
  • , webpack-encore

.



, ?


— , File -> New... -> Symfony Project. -, .


2 :


  1. , Symfony . , .


    , Symfony
    -
    -

  2. , . , ./bundles.


    ,
    -2 ( PhpStorm )
    IDE,: ,


, .



./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


All Articles