¿Cómo reutilizar el código con los paquetes de Symfony 5? Parte 1. Paquete mínimo

Hablemos sobre cómo detener el copiar y pegar entre proyectos y transferir el código a un paquete de plug-in reutilizable Symfony 5. Una serie de artículos que resumen mi experiencia con los paquetes se llevarán a cabo en la práctica desde la creación de un paquete mínimo y la refactorización de una aplicación de demostración para las pruebas y el ciclo de lanzamiento del paquete.


En la primera parte:


  • ¿Por qué se necesitan paquetes?
  • Proyecto de ejemplo: Calendario
  • Personalizar el medio ambiente: 2 formas de desarrollar
  • Crea un paquete mínimo
  • Conectar un paquete a un proyecto

Contenido de la serie

¿Qué es un paquete y por qué es necesario?


Necesitará el paquete de Symfony entonces (y solo entonces) cuando se canse de copiar y pegar el código del proyecto al proyecto y piense en reutilizarlo. Tarde o temprano, se entiende que es más conveniente aislar el código en un complemento reutilizable. Paquete de Symfony: este es un módulo de este tipo en el ecosistema de Symfony.


El paquete es un paquete de código PHP reutilizable en esteroides Symfony Framework.

Los paquetes difieren de los paquetes PHP normales al usar componentes y convenciones generalmente aceptadas que simplifican la integración con una aplicación Symfony. Al seguir las convenciones de nomenclatura específicas del ecosistema y las estructuras de código, los paquetes pueden conectarse, configurarse y expandirse automáticamente en la aplicación host de Symfony. Los paquetes se conectan al proyecto a través del administrador de dependencias 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. El paquete mínimo
Parte 2. Sacamos el código y las plantillas en el paquete
Parte 3. Integración del paquete con el host: plantillas, estilos, JS
Parte 4. Interfaz para expandir el paquete
Parte 5. Parámetros y configuración
Parte 6. Pruebas, microaplicación dentro del paquete
Parte 7 Ciclo de lanzamiento, instalación y actualización.


All Articles