Comment réutiliser du code avec des bundles symfony 5? Partie 1. Forfait minimum

Parlons de la façon d'arrêter le copier-coller entre les projets et de transférer le code dans un bundle de plug-ins symfony 5. réutilisable. Une série d'articles résumant mon expérience avec les bundles conduira en pratique à la création d'un bundle minimal et à la refactorisation d'une application de démonstration aux tests et au cycle de publication du bundle.


Dans la première partie:


  • Pourquoi des forfaits sont-ils nécessaires?
  • Exemple de projet: calendrier
  • Personnalisez l'environnement: 2 façons de développer
  • Créez un ensemble minimal
  • Connecter un bundle à un projet

Contenu de la série

Qu'est-ce qu'un bundle et pourquoi est-il nécessaire?


Vous aurez alors besoin du bundle Symfony (et seulement à ce moment-là) lorsque vous en aurez assez de copier le code du projet dans le projet et pensez à le réutiliser. Tôt ou tard, on comprend qu'il est plus pratique d'isoler le code dans un plug-in réutilisable. Bundle Symfony - c'est un tel module dans l'écosystème Symfony.


Le bundle est un package de code PHP réutilisable sur les stéroïdes Symfony Framework.

Les bundles diffèrent des packages PHP standard en utilisant des composants et des conventions généralement acceptées qui simplifient l'intégration avec une application Symfony. En suivant les conventions de dénomination et les structures de code spécifiques à l'écosystème, les bundles peuvent se connecter, configurer et s'étendre automatiquement dans l'application hôte Symfony. Les bundles se connectent au projet via le gestionnaire de dépendances 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-.


:


Partie 1. Le bundle minimum
Partie 2. Nous sortons le code et les modèles du bundle
Partie 3. Intégration du bundle avec l'hôte: modèles, styles, JS
Partie 4. Interface pour développer le bundle
Partie 5. Paramètres et configuration
Partie 6. Test, microapplication à l'intérieur du bundle
Partie 7 Cycle de publication, installation et mise à jour


All Articles