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.