Hlavní navigace

Úvod do frameworku Symfony: všetko dohromady v harmónii

Ján Bodnár

Článok predstavuje Symfony, čo je populárny PHP webový framework, ktorý sa často využíva na tvorbu webových aplikácií. Ide o prvý zo série článkov, v ktorých by som sa rád venoval tomuto frameworku.

Doba čtení: 5 minut

Sdílet

Definícia

Domovská stránka projektu definuje Symfony nasledovne:

Symfony is a set of PHP Components, a Web Application framework, a Philosophy, and a Community — all working together in harmony.

Symfony je množina PHP komponentov, webový framework, filozofia a komunita. Tieto prvky spolu tvoria harmonický celok.

Symfony

Symfony framework je určený na tvorbu webových stránok a aplikácií. Framework je postavený na Symfony komponentoch. Symfony komponenty sú sadou samostatných a znovupoužiteľných PHP komponent. Symfony komunitu tvorí odhadom 600 000 programátorov zo 120 krajín sveta. Filozofiou Symfony je presadzovanie profesionalizmu, štandardizácie, osvedčených postupov a interoperability aplikácií.

Symfony je free, open-source projekt pod licenciou MIT. Tvorcovia frameworku si zarábajú komerčnými doplnkami ako sú Symfony Cloud, Symfony Insight a prednáškami. Symfony vyšiel v roku 2005. Pôvodným tvorcom Symfony je Fabien Potencier, ktorý je dodnes veľmi aktívnym prispievateľom. Vývoj je sponzorovaný francúzskou firmou Sensio Labs v Paríži.

Francúzsky pôvod frameworku sa prejavuje o.i. tým, že množstvo kvalitných výukových materiálov je dostupných len vo francúzštine alebo vyššími cenami komerčných nadstávb (Symfony Cloud).

Symfony bol tohto roku vybraný Európskou komisiou medzi najdôležitejšie softvérové projekty, pre ktoré boli vyčlenené peniaze pre bug hunting.

Inšpirácie inými frameworkami

Symfony bol inšpirovaný frameworkami Django, Ruby on Rails a Spring. Z Djanga sa prebrali napríklad formuláre. Ruby on Rails mal veľký vplyv naprieč softvérovým vývojom, svojími inovatívnymi ideami ako sú convention over configuration (používanie konvencií namiesto konfiguračných súborov), databázové migrácie, alebo scaffolding (konštruovanie kostry kódu). Všetky nájdeme aj v Symfony. Spring inšpiroval Symfony svojím DI (dependency injection) kontajnerom alebo security vrstvou. Validácia bola prebraná z Java Bean Validation špecifikácie.

Naopak Symfony inšpiroval dnes veľmi populárny framework Laravel. Výborný Symfony debug toolbar prevzal Django a veľkú odozvu má napríklad Twig šablónovací systém.

PHP composer

Composer je utilita určená pre správu knižníc a iných zdrojov (tzv. závislostí, dependencies) v PHP. Umožňuje programátorom deklarovať aké závislosti bude využívať ich PHP projekt. Composer bol inšpirovaný JavaScriptovým npm manažérom. PHP knižnice sú archivované v repozitároch; najväčším z nich je Packagist. Lokálne ukladá composer balíky v adresári vendor. Composer tiež prináša autoloading pre PHP.

Composer zaznamenáva závislosti v súbore composer.json. Pomocný súbor composer.lock eviduje presné verzie knižníc a ich závislostí. Tým sa maximalizuje prenositeľnosť a minimalizujú sa konflikty.

Symfony Flex

Symfony Flex je nástroj umožňujúci vývojárom automatizovať správu balíčkov. Inštalácia balíčku sa stáva veľmi jednoduchou a intuitívnou. Flex vykoná všetky potrebné akcie k registrácií a konfigurácií balíčka do projektu. Knižnica symfony/flex je pluginom composera.

Pre automatizáciu sa využívajú tzv. Symfony recipes, ktoré zaregistrujú a nakonfigurujú balíček v rámci projektu. Recepty tiež umožňujú používanie aliasov. Tak si môžeme napríklad nainštalovať balíček symfony/profiler-pack pomocou aliasu profiler.

Symfony 4 je mikroframework

Od verzie 4 je Symfony mikroframework. (Symfony 4 vyšiel v novembri 2017.) Vďaka tomu môžeme využiť framework aj na tvorbu restových alebo konzolových aplikácií. Programátori si môžu nainštalovať minimálnu kostru frameworku a podľa potrieb všetky ostatné komponenty doinštalovať. Veľkosť úvodného projetku sa tým oproti verzii 3 zmenšila o 70%. Pre tento minimálny starter použijeme symfony/skeleton.

$ composer create-project symfony/skeleton firstapp
$ cd firstapp
$ composer req annotations twig
$ composer req server maker profiler --dev

Pomocou composera naištalujeme minimálnu kostru Symfony frameworku a postupne doinštalujeme potrebné balíčky.

Symfony 4 ponúka balík symfony/website-skeleton, ktorý je odladený pre typickú webovú aplikáciu.

Symfony nástroje

Symfony používa na pokrytie potrieb moderných webových aplikácií sadu svojich vlastných a externých nástrojov. Nasledujúci zoznam uvádza neúplný výpočet tých známejších z nich.

  • Twig – pre tvorbu šablóny
  • Monolog – pre logovanie
  • Doctrine – pre prácu s databázami
  • Panther – pre testovanie browserov
  • PHPUnit – pre unit testing
  • Swift Mailer – pre prácu s emailami
  • Encore – pre prácu s frontend prostriedkami
  • Composer – pre manažment závislostí a autoloading

V čase písanie týchto riadkov vývojári pracujú na vlastnom emailovom komponente, ktorá by mohla nahradiť Swift Mailer.

Symfony ako sada komponentov

Symfony je množina PHP komponentov. Mnohé z nich využívajú iné známe PHP projetky ako sú Laravel, Joomla, alebo Drupal. Nad týmito komponentmi je postavený Symfony framework.

Toto je zoznam niekoľkých populárnych Symfony komponentov:

  • Asset komponent
  • HttpFoundation komponent
  • Process komponent
  • Finder komponent
  • FileSystem komponent
  • Var Dumper komponent
  • Yaml komponent
  • Security komponent
  • Validation komponent
  • Form komponent
  • Serializer komponent
  • Maker komponent
  • Translation komponent

Viaceré z komponentov sú nesmierne populárne a majú desiatky až stovky miliónov stiahnutí z Packagist repozitára. Ďalej si pre ilustráciu ukážeme použitie dvoch komponentov.

Process komponent

Ukážeme si použitie Symfony Process komponenta.

$ mkdir symkomp
$ cd symkomp
$ touch listing.php files.php

Vytvoríme si nový adresár a súbory.

$ composer require symfony/process

Stiahneme si symfony/process komponent.

<?php
// listing.php

require('vendor/autoload.php');

use Symfony\Component\Process\Process;
use Symfony\Component\Process\Exception\ProcessFailedException;

$process = new Process(['ls', '-lsa']);
$process->run();

if (!$process->isSuccessful()) {
    throw new ProcessFailedException($process);
}

echo $process->getOutput();

Príklad využíva Process na vytvorenie procesu, ktorý spustí ls príkaz.

$ php listing.php
total 6
0 drwxr-xr-x 1 Jano 197121    0 Mar  3 16:08 .
0 drwxr-xr-x 1 Jano 197121    0 Mar  3 16:04 ..
1 -rw-r--r-- 1 Jano 197121   61 Mar  3 16:05 composer.json
4 -rw-r--r-- 1 Jano 197121 2209 Mar  3 16:05 composer.lock
1 -rw-r--r-- 1 Jano 197121  367 Mar  3 16:08 listing.php
0 drwxr-xr-x 1 Jano 197121    0 Mar  3 16:05 vendor

Toto je výstup programu.

Filesystem komponent

Symfony Filesystem komponent poskytuje utility uľahčujúce prácu so súborovým systémom.

$ composer require symfony/filesystem

Inštalujme si Symfony Filesystem komponent.

<?php
// files.php

require('vendor/autoload.php');

use Symfony\Component\Filesystem\Exception\IOExceptionInterface;
use Symfony\Component\Filesystem\Filesystem;

$fs = new Filesystem();

try {
    $fs->touch('words.txt');
    $fs->dumpFile('words2.txt', "falcon\nsun\nwater");
} catch (IOExceptionInterface $e) {
    echo "An error occurred  " . $e->getMessage();
}

V príklade vytvoríme prázdny súbor words.txt a súbor words2.txt, do ktorého zapíšeme nejaké dáta.

Študijné materiály

Symfony má prepracovanú online dokumentáciu (v angličtine). Lior Chamla a Grafikart majú YouTube kanály s výbornými výukovými videami (vo francúzštine). V češtine sú dostupné tutoriály na zdrojaku. Na svojej stránke priebežne pridávam Symfony tutoriály (v angličtine). Dobrým zdrojom sú aj komerčné videá Piotra Juru na Udemy.