Wie kann man Code mit Symfony 5-Bundles wiederverwenden? Teil 1. Mindestbündel

Lassen Sie uns darüber sprechen, wie Sie das Kopieren und Einfügen zwischen Projekten stoppen und den Code in ein wiederverwendbares Symfony 5-Plug-In-Bundle übertragen können. Eine Reihe von Artikeln, die meine Erfahrungen mit Bundles zusammenfassen, führen in der Praxis von der Erstellung eines minimalen Bundles und der Umgestaltung einer Demo-Anwendung zu Tests und dem Bundle-Release-Zyklus.


Im ersten Teil:


  • Warum werden Bundles benötigt?
  • Beispielprojekt: Kalender
  • Passen Sie die Umgebung an: 2 Möglichkeiten zur Entwicklung
  • Erstellen Sie ein minimales Bundle
  • Verbinden eines Bundles mit einem Projekt


Was ist ein Bundle und warum wird es benötigt?


Sie benötigen das Symfony-Bundle dann (und nur dann), wenn Sie es satt haben, Code aus dem Projekt in das Projekt zu kopieren und einzufügen, und darüber nachdenken, ihn wiederzuverwenden. Früher oder später wird verstanden, dass es bequemer ist, den Code in ein wiederverwendbares Plug-In zu isolieren. Symfony Bundle - Dies ist ein solches Modul im Symfony-Ökosystem.


Das Bundle ist ein Paket mit wiederverwendbarem PHP-Code auf Steroiden Symfony Framework.

Bundles unterscheiden sich von regulären PHP-Paketen durch die Verwendung von Komponenten und allgemein anerkannten Konventionen, die die Integration in eine Symfony-Anwendung vereinfachen. Durch Befolgen von ökosystemspezifischen Namenskonventionen und Codestrukturen können Bundles in der Symfony-Hostanwendung automatisch eine Verbindung herstellen, konfigurieren und erweitern. Bundles stellen über den Abhängigkeitsmanager eine Verbindung zum Projekt her 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-.


:


Teil 1. Das minimale Bundle
Teil 2. Wir nehmen den Code und die Vorlagen im Bundle heraus.
Teil 3. Integration des Bundles mit dem Host: Vorlagen, Stile, JS
Teil 4. Schnittstelle zum Erweitern des Bundles
Teil 5. Parameter und Konfiguration
Teil 6. Testen, Mikroanwendung innerhalb des Bundles
Teil 7 Release-Zyklus, Installation und Update


All Articles