Development

Documentation/cs_CZ/book/1.0/01-Introducing-Symfony

You must first sign up to be able to contribute.

Kapitola 1 - Úvod do symfony

S čím vám může symfony pomoci? Co je potřeba pro jeho použití? Tato kapitola odpovídá právě na tyto otázky.

Symfony ve zkratce

Framework zefektivňuje vývoj aplikací, čehož dosahuje použitím mnoha pro daný účel vytvořených vzorů. Framework také dává kódu strukturu a nutí vývojáře, aby psal lepší, čitelnější a lépe spravovatelný kód. A konečně, framework usnadňuje programování, poněvadž rozděluje komplexní operace do jednoduchých příkazů.

Symfony je kompletní framework navržený tak, aby optimalizoval vývoj webových aplikací pomocí několika klíčových vlastností. Pro začátečníky, u webové aplikace odděluje business logiku, serverovou logiku a prezentační pohledy. Obsahuje četné nástroje a třídy, určené pro zkrácení času, potřebného pro vývoj komplexní webové aplikace. Navíc automatizuje obecné úlohy, takže vývojář se může zaměřit pouze na specifika dané aplikace. Tyto výhody v konečném výsledku znamenají, že není potřeba znovu vynalézat kolo pokaždé, když je vytvářena nová webová aplikace!

Symfony bylo celé napsáno v PHP 5. Bylo důkladně otestováno v různých v praxi nasazených projektech a používá se pro e-business u hodně vytěžovaných webových sídel. Je kompatibilní s většinou dostupných databází, včetně MySQL, PostgreSQL, Oracle a Microsoft SQL Serveru. Běží na platformách *nix a Windows. Pojďme se podrobněji podívat na jeho vlastnosti a možnosti.

Vlastnosti symfony

Symfony bylo vytvořeno, aby splnilo následující požadavky:

  • jednoduchá instalace a konfigurace na většině platforem (a garantovaná použitelnost na platformách *nix a Windows)
  • nezávislost na použité databázi
  • jednoduché použití pro většinu případů, ale stále dostatečná přizpůsobitelnost pro komplexní případy
  • založeno na premise "konvence nad konfigurací" -- vývojář potřebuje nastavit pouze to, co je nekonvenční
  • vyhovující většině webových "best practices" a návrhových vzorů
  • enterprise-ready -- adaptabilní na existující IT politiky a architektury a dostatečně stabilní pro dlouhotrvající projekty
  • velmi dobře čitelný kód, pro jednoduchou správu, s komentáři pro phpDocumentor
  • snadno rozšiřitelný, umožňující integraci s knihovnami jiných dodavatelů

Automatizované vlastnosti webového projektu

Většina obecných vlastností webových projektů je v rámci symfony zautomatizována, jako například:

  • vestavěná vrstva pro internacionalizaci umožňuje překládat jak data, tak rozhraní, stejně tak jako lokalizaci obsahu
  • prezentační vrstva používá šablony a rozložení, které mohou být vytvořeny HTML návrháři bez znalosti samotného frameworku. Pro redukci potřebného množství prezentačního kódu jsou určeni pomocníci (helpers), kteří zapouzdřují velké části kódu do volání jednoduchých funkcí.
  • formuláře podporují automatickou validaci a znovuvyplnění, což zajišťuje dobrou kvalitu dat v databázi a usnadňuje práci uživatele
  • ošetření výstupů chrání aplikace před útokem pomocí porušených dat
  • způsob správy cache redukuje použití šířky pásma a zatížení serveru
  • autentizace a pověření usnadňují vytváření vyhrazených oblastí a správu zabezpečení uživatelů
  • směrování a elegantní URL vytvářejí z adresy stránky část rozhraní a zlepšují tak její přístupnost pro vyhledávače
  • vestavěné funkce pro e-mail a správu API umožňují webovým aplikacím rozšířit klasickou interakci prohlížeče
  • seznamy jsou příjemnější na používání díky automatickému stránkování, třídění a filtrování
  • továrny (abstraktní třídy), pluginy a rozšířené třídy (mixins) poskytují rozšiřitelnost vysoké úrovně
  • implementace Ajaxu je jednoduchá díky jednořádkovým pomocníkům (helpers), kteří zapouzdřují JavaScript, kompatibilní s různými prohlížeči

Vývojové prostředí a nástroje

Aby symfony vyhovělo požadavkům společností, které mají vlastní štábní kulturu pro kódování a pravidla projektového managementu, je možné ho zcela přizpůsobit. Ve výchozím nastavení poskytuje několik vývojových prostředí a je svázáno s četnými nástroji pro automatizaci obecných softwarově-inženýrských úkolů:

  • nástroje pro generování kódu jsou skvělé pro vytváření prototypů a administrace back-endu na jedno kliknutí
  • vestavěný jednotkový (unit) a funkcionální testovací framework poskytuje perfektní nástroje pro vývoj řízený testy (TTD)
  • pro zrychlení odstranění chyb zobrazuje debugovací panel všechny potřebné informace ke stránce, na které vývojář právě pracuje
  • rozhraní příkazové řádky automatizuje deployment aplikace mezi dvěma servery
  • jsou možné živé změny konfigurace a také jsou efektivní
  • logovací funkce dávají administrátorovi plnou a detailní kontrolu nad aktivitami dané aplikace

Kdo vytvořil symfony a proč?

První verze symfony byla vydána v říjnu 2005 zakladatelem projektu Fabienem Potencierem, spoluautorem této knihy. Fabien je CEO společnosti Sensio (http://www.sensio.com/), francouzské webové agentury, která je dobře známá svým inovativním pohledem na vývoj pro web.

Ještě dříve, v roce 2003, strávil Fabien nějaký čas zkoumáním existujících open source nástrojů pro vývoj webových aplikací v PHP. Jak zjistil, žádný nevyhovoval dříve popsaným požadavkům. Když bylo vydáno PHP 5, rozhodl se, že integruje dostupné nástroje, které byly na dostatečně zralém stupni vývoje, do plnohodnotného frameworku. Následně strávil rok vývojem jádra symfony, založeném na MVC (Model-View-Controler) frameworku Mojavi, objektově relačním mapování (ORM) Propel a šablonovacích pomocnících převzatých z Ruby on Rails.

Fabien původně vytvořil symfony pro projekty firmy Sensio, protože mít k dispozici efektivní framework je ideální způsob, jak aplikace vyvíjet rychleji a výkonněji. Způsobuje to také, že webový vývoj je intuitivnější a výsledné aplikace jsou robustnější a jednoduššeji se spravují. Framework toto dokázal, když byl použit na vytvoření webové aplikace pro maloobchodní prodej dámského prádla a následně byl aplikován pro další projekty.

Po jeho úspěšném použití v několika projektech se Fabien rozhodl vydat symfony pod open source licencí. Udělal to proto, že chtěl věnovat tuto práci komunitě, získat zpětnou vazbu od uživatelů, zviditelnit zkušenosti v Sensiu a také proto, že je to zábava.

NOTE Proč "symfony" a ne třeba "FooBarFramework"? Protože Fabien chtěl krátké jméno, které by obsahovalo s (jako Sensio) a f (jako framework), které by bylo jednoduše zapamatovatelné a nebylo spojeno s nějakým jiným vývojovým nástrojem. A také nemá rád velká písmena. symfony bylo dostatečně dobré, ačkoliv ne úplně anglicky a také bylo dostupné pro název projektu. Další možnou alternativou bylo "baguette".

Aby bylo symfony úspěšným open source projektem, bylo potřeba vytvořit rozsáhlou dokumentaci v angličtině. Fabien požádal svého kolegu ze Sensio Françoise Zaninotta, dalšího autora této knihy, aby se ponořil do kódu a napsal o tom online knihu. Chvíli to trvalo, ale když byl projekt zveřejněn, byl dostatečně dobře zdokumentován, aby byl přitažlivý pro mnohé vývojáře. Zbytek už je historie.

Komunita okolo symfony

Jakmile byly spuštěny webové stránky (http://www.symfony-project.com/), množství vývojářů z celého světa si framework stáhli a nainstalovali, přečetli si online dokumentaci a vytvořili své první aplikace pomocí symfony. A věhlas se začal šířit.

V této době získávaly frameworky pro webové aplikace na popularitě a byla zde vysoká poptávka po plnohodnotném frameworku v PHP. Symfony nabídlo přesvědčivé řešení založené na působivé kvalitě kódu a velkém množství dokumentace -- dvě nesporné výhody oproti ostatním hráčům v katagorii frameworků. Brzy se začali přidávat přispěvatelé, kteří předkládali záplaty a rozšíření, dělali korektury dokumentace a převzali další potřebné úlohy.

Veřejný repozitář zdrojů a kupónový systém nabízí různé možnosti podílení se na projektu a všichni dobrovolníci jsou vítáni. Fabien je stále vrchním správcem hlavního kmene repozitáře zdrojového kódu a garantuje tak kvalitu kódu.

Ideální prostor pro podporu dnes nabízí symfony fórum, mailová konference a IRC kanál, kde libovolná otázka dostává v průměru čtyři odpovědi. Každým dnem přibývá nováčků, kteří si nainstalují symfony a wiki a sekce s částmi kódu poskytují množství uživateli vytvořené dokumentace. Průměrné množství aplikací založených na symfony je kolem pěti týdně a stále roste.

Komunita kolem symfony je třetím pilířem tohoto frameworku a my doufáme, že po přečtení této knihy se připojíte také.

Je symfony pro mne?

Ať už jste expert na PHP 5, nebo jste v programování webových aplikací nováček, v obou případech pro vás bude symfony použitelné. Jediný faktor ovlivňující rozhodnutí jestli symfony použít nebo ne, je velikost vašeho projektu.

Pokud chcete vyvíjet jednoduché webové sídlo s pěti až deseti stránkami, omezeným přístupem do databáze a bez nutnosti zajistit jeho výkonnost, či dokumentaci, potom byste si mohli vystačit se samotným PHP. Použitím webového frameworku v takovém případě nezískáte mnoho a použití objektově orientovaného modelu nebo MVC modelu může pouze zpomalit váš vývojový proces. Mimo jiné, symfony není optimalizováno pro efektivní použití na sdíleném serveru, kde PHP běží pouze v CGI módu.

Na druhou stranu pokud vyvíjíte komplexnější webovou aplikaci, se složitou business logikou, není PHP dostačující. Pokud svoji aplikaci plánujete v budoucnu spravovat nebo rozšiřovat, budete potřebovat kód, který je odlehčený, čitelný a efektivní. Pokud chcete intuitivně použít nejnovější trendy v uživatelské interakci (jako Ajax), není dobré pouze napsat stovky řádků JavaScriptu. Pokud chcete vyvíjet rychle a zároveň se u toho bavit, potom samotné PHP vám nepřinese uspokojení. Ve všech těchto případech je pro vás vhodné symfony.

A samozřejmě, pokud jste profesionální webový vývojář, tak všechny klady webového frameworku již znáte a potřebujete nějaký, který je zralý, dobře zdokumentovaný a s širokou komunitou. Již nemusíte hledat, symfony je řešení pro vás.

TIP Pokud máte rádi vizuální ukázky, podívejte se na screencasty, které jsou dostupné na webové stránce symfony. Uvidíte, jak rychlé a zábavné je vyvíjet aplikace se symfony.

Základní koncepty

Než začnete se symfony, měli byste porozumět několika základním konceptům. Pokud již víte, co to je OOP, ORM, RAD, DRY, KISS, TDD, YAML a PEAR, můžete tuto část přeskočit.

PHP 5

Symfony je napsáno v PHP 5 (http://www.php.net/) a je určeno pro vytváření webových aplikací v tomtéž jazyce. Pro využití všech možností frameworku je tedy vyžadováno solidní porozumění PHP 5.

Vývojáři, kteří již znají PHP 4, ale ne PHP 5, by se měli hlavně zaměřit na nový objektově orientovaný model jazyka.

Objektově orientované programování (OOP)

Objetově orientované programování (OOP) v této kapitole vysvětleno nebude, protože by to bylo na samostatnou knihu. OOP je předpokladem pro naučení se symfony, protože symfony velice široce používá objektově orientovaný mechanismus, tak jak je k dispozici v PHP 5.

Wikipedia vysvětluje OOP následovně:

Myšlenka skrývající se za objektově orientovaným programování je ta, že počítačový program může být nahlížen jako souhrn individuálních jednotek nebo objektů, které na sebe navzájem reagují. Opačný případ je tradiční pohled, kdy program je chápán jako soubor funkcí, nebo jednoduše jako seznam instrukcí pro počítač.

PHP 5 z tohoto objektově orientovaného paradigmatu implementuje třídy, objekty, metody, dědičnost a mnoho dalšího. Pro ty, kteří nejsou obeznámeni s těmito koncepty je vhodné si přečíst odpovídající PHP dokumentaci, která je dostupná na http://www.php.net/manual/en/language.oop5.basic.php.

Magické metody

Jednou ze silných stránek objektových schopností PHP je použití magických metod. To jsou metody, které mohou zastínit výchozí chování tříd bez potřeby jejich modifikace. Syntaxe PHP je tak méně ukecaná a více rozšiřitelná. Tyto metody se dají snadno rozpoznat, protože jejich názvy začínají dvěmi podtržítky (__).

Například při zobrazení daného objektu se PHP implicitně dívá po metodě __toString(), aby se tento zobrazil ve formátu, jak ho definoval vývojář:

[php]
yObject = new myClass();
echo $myObject;
// Will look for a magic method
echo $myObject->__toString();

Symfony magické metody používá, takže byste jim měli důkladně porozumět. Jsou popsány v PHP dokumentaci: (http://www.php.net/manual/en/language.oop5.magic.php).

PHP Extension and Application Repository (PEAR)

PEAR je "framework a distribuovaný systém pro znovupoužitelné PHP komponenty". PEAR vám umožňuje si stáhnout, instalovat, updgradovat a odinstalovávat PHP skripty. Pokud použijete PEAR balíček, nemusíte se starat, kam uložit skriptty, jak je učinit dostupnými, nebo jak rozšířit rozhraní příkazové řádky (CLI).

PEAR je projekt spravovaný komunitou napsaný v PHP a dodávaný se standardními PHP distribucemi.

TIP Webová stránka PEAR http://pear.php.net/ poskytuje dokumentaci a balíčky sdružené podle kategorií.

PEAR je nejprofesionálnější způsob jako instalovat externí PHP knihovny. Symfony doporučuje používat PEAR pro udržení centrálního instalačního bodu napříč četnými projekty. Symfony pluginy jsou balíčky PEAR se speciální konfigurací. Samotný symfony framework je dostupný jako PEAR balíček.

Pro používání symfony nepotřebujete znát syntaxi PEAR. Potřebujete pouze vědět, co to dělá a mít to nainstalované. Jestli je PEAR na vašem počítači naistalován můžete vyzkoušet zadáním následujícího příkazu v CLI:

> pear info pear

Tento příkaz vrátí číslo verze vaší instalace PEAR.

Projekt symfony má svůj vlastní PEAR repozitář, či kanál. Mějte na paměti, že kanály jsou v PEAR dostupné až od verze 1.4.0, takže byste měli upgradovat, pokud je vaše verze starší. Pro upgrade vaší verze PEAR stačí zadat následující příkaz:

> pear upgrade PEAR

Objektově relační mapování (ORM)

Databáze jsou relační. PHP 5 a symfony jsou objektově orientované. Pro přístup do databáze objektově orientovaným způsobem je zapotřebí rozhraní, které překládá objektovou logiku na logiku relační. Toto rozhraní se nazývá objektově relační mapování nebo ORM.

ORM je vytvořeno z objektů, které umožňují přistupovat k datům a business logiku si drží v sobě.

Jedním z přínosů abstraktní objektově/relační vrstvy je, že nás odstiňuje od používání syntaxe konkrétní databáze. Automaticky překládá volání modelových objektů do SQL dotazů optimalizovaných pro stávající databázi.

To znamená, že je velmi snadné přepnout se na jiný databázový systém uprostřed projektu. Představte si, že musíte rychle napsat prototyp aplikace, ale zákazník se ještě nerozhodnul, který databázový systém by pro něj byl nejlepší. Můžete začít vytvářet aplikaci například s SQLite a až se zákazník rozhodné, přepnout na MySQL, PostgreSQL nebo Oracle. Pouze změníte jeden řádek v konfiguračním souboru a ono to pracuje.

Abstraktní vrstva zapouzdřuje logiku dat. Zbytek aplikace nepotřebuje vědět nic o SQL dotazech a najít SQL, který přistupuje do databáze je jednoduché. Vývojáři, kteří se specializují na programování databází, také jednoduše ví, kam jít.

Používání objektů místo záznamů a tříd místo tabulek má také další výhodu: můžete do tabulky přidat nový "doplněk". Pokud máte například tabulku nazvanou Client se dvěma poli FirstName a LastName, můžete požadovat atribut Name. V objektově orientovaném světe je snadné přidat novou doplňující metodu do třídy Client:

[php]
public function getName()
{
  return $this->getFirstName().' '.$this->getLastName();
}

Všechny opakující se funkce pro přístup k datům a business logika dat může být spravována uvnitř takových objektů. Představme si například třídu ShoppingCart ve které udržujeme položky (které jsou objekty). Abycho získali celkové množství v nákupním košíku pro zaplacení, můžeme přidat metodu getTotal():

[php]
public function getTotal()
{
  $total = 0;
  foreach ($this->getItems() as $item)
  {
    $total += $item->getPrice() * $item->getQuantity();
  }
  return $total;
}

A je to. Představte si, jako dlouho by trvalo napsat SQL dataz, který dělá to samé.

Propel, další open source projekt, je v současnosti jednou z nejlepších abstraktních objektově/relačních vrstev pro PHP 5. Propel je do symfony hladce zaintegrován, takže většina manipulací s daty, popsaných v této knize používá Propel syntaxi. Tato kniha sice popisuje, jak používat Propel objekty, ale pro úplnější reference doporučujeme navštívit webovou stránku Propel (http://propel.phpdb.org/trac/).

Rapidní vývoj aplikací (RAD)

Programování webových aplikací bylo dlouhou dobu pomalá a nudná práce. Věrný obvyklým životním cyklům definovaným softwarovým inženýringem (například Rational Unified Process je jedním z nich), nemohl začít vývoj webových aplikací než byl sepsán kompletní seznam požadavků, nakresleno množství UML diagramů a vyprodukovány tuny přípravné dokumentace. Toto odpovídalo celkové rychlosti vývoje, nedostatečné flexibility programovacích jazyků (museli jste to napsat, přeložit, restartovat a kdo ví co všechno ještě, než jste mohli program spustit) a ze všeho nejvíc faktu, že zákazníci byli trochu rozumní a neměnili neustále názor.

Dnes je podnikání rychlejší a zákazníci mají sklon neustále měnit názor v průběhu vývoje projektu. Samozřejmě očekávají, že vývojový tým se přizpůsobí jejich potřebám a rychle změní strukturu aplikace. Naštěstí použití skriptovacích jazyků jako je Perl nebo PHP usnadňují použití jiných programovacích strategií jako je rapidní vývoj aplikací (RAD) nebo agilní vývoj software.

Jedna z myšlenek těchto metodologií je začít vývoj hned jak je to možné, takže zákazník si může vyzkoušet funkční prototyp a určit další směr vývoje. Aplikace je potom vytvářena v interaktivním procesu a v krátkých vývojových cyklech vycházejí přírustkové verze s bohatou funkcionalitou.

Pro vývojáře z toho vyplývají četné důsledky. Vývojář nepotřebuje přemýšlet o budoucnosti, když implementuje nějakou vlastnost. Použitá metoda může být jednoduchá a přímočará jak jen je možné, což velmi dobře ilustruje zásada KISS principu: Keep It Simple, Stupid (nech to jednoduché, hlupáku).

Když se požadavky rozšíří, nebo když je přidána nová vlastnost, musí se obvykle stávající kód částečně přepsat. Tento proces se nazývá refaktoring a během vývoje webové aplikace k němu dochází často. Kód je přesouván na různá místa, tak aby to odpovídalo jeho přirozenosti. Duplicitní části kódu jsou refaktorovány na jedno místo tak, aby to vyhovělo principu DRY: Don't Repeat Yourself (neopakuj sám sebe).

A pro ujištění, že aplikace během průběžných změn je stále funkční, jsou potřeba celá množina jednotkových (unit) testů, které mohou být zautomatizovány. Pokud jsou dobře napsány, dávají jednotkové testy solidní jistotu, že vše je funkční i po přidání refaktorovaného kódu. Některé vývojové metodologie dokonce vyžadují napsat testy, ještě než se začne kódovat -- toto se nazývá vývoj řízený testy (TTD).

NOTE Existuje mnoho principů a dobrých návyků souvisejících s agilním programováním. Jedna z nejefektivnějších agilních vývojových metodologií se nazývá extrémní programování (zkracováno jako XP) a XP literatura vás může mnoho naučit o vývoji aplikací rychlým a efektivním způsobem. Dobrým začátkem jsou knihy ze série XP od Kenta Becka (Addison-Wesley).

Symfony je perfektní nástroj pro RAD. Je nespornou skutečností, že framework byl vytvořen webovou společností, která RAD principy používá pro své vlastní projekty. Z toho vyplývá, že naučit se pracovat se symfony není o tom naučit se nový jazyk, ale spíše o aplikování správných reflexech a nejlepším rozhodnutí jak vytvářet aplikace efektivněji.

Webové sídlo projektu symfony nabízí tutoriál, který krok za krokem ilustruje vývoj aplikace agilním způsobem. Je pojmenován aseet (http://www.symfony-project.com/askeet) a je to doporučené čtení pro ty, kteří se chtějí naučit více o agilním programování.

YAML

Podle oficiálního webového sídla YAML (http://www.yaml.org/) je YAML "přímočarý, strojově zpracovatelný formát na serializaci dat, který je navržen jako čitelný pro člověka a schopný interakce se skriptovacími jazyky". Jinak řečeno, YAML je velmi jednoduchý jazyk umožňující popsat data podobným způsobem jako XML, ale s mnohem jednodušší syntaxí. Speciálně je použitelný pro data, která mohou být přeložena do polí nebo slovníků, například:

[php]
$house = array(
  'family' => array(
    'name'     => 'Doe',
    'parents'  => array('John', 'Jane'),
    'children' => array('Paul', 'Mark', 'Simone')
  ),
  'address' => array(
    'number'   => 34,
    'street'   => 'Main Street',
    'city'     => 'Nowheretown',
    'zipcode'  => '12345'
  )
);

Toto pole v PHP může být automaticky vytvořeno při zpracování YAML řetězce:

house:
  family:
    name:     Doe
    parents:
      - John
      - Jane
    children:
      - Paul
      - Mark
      - Simone
  address:
    number: 34
    street: Main Street
    city: Nowheretown
    zipcode: "12345"

YAML určuje strukturu pomocí odsazení, posloupnosti položek jsou uvozeny pomlčkou a páry klíč/hodnota v poli (mapě) jsou odděleny dvojtečkou. YAML má také zkrácenou syntaxi popisující tu samou strukturu v několika řádcích, kde pole jsou vyznačeny pomocí [] a slovníky (hashe) pomocí {}. Takže předcházející YAML data mohou být popsána kratší cestou jako:

house:
  family: { name: Doe, parents: [John, Jane], children: [Paul, Mark, Simone] }
  address: { number: 34, street: Main Street, city: Nowheretown, zipcode: "12345" }

YAML je akronym pro YAML Ain't Markup Language (dříve Yet Another Markup Language) a vyslovuje se jako "jeml" (podle vzoru camel). Tento formát existuje od roku 2001 a YAML parsery existují pro velké množství jazyků.

TIP Specifikace YAML formátu je dostupná na http://www.yaml.org/.

Jak můžete vidět, napsat YAML je mnohem rychlejší než napsat XML (již nikdy víc uzavírací značky a povinné uvozovky) a je mnohem mocnější než .ini soubory (které nepodporují hierarchii). To je důvod, proč symfony preferuje YAML jako jazyk pro uložení konfigurace. V této knize uvidíte mnoho YAML souborů, ale jsou tak přímočaré, že pravděpodobně nebudete potřebovat se učit něco navíc.

Shrnutí

Symfony je webový aplikační framework pro PHP 5. Přidává novou vrstvu nad jazyk PHP, která poskytuje nástroje pro urychlení vývoje komplexních webových aplikací. Tato kniha má za úkol vás s tímto seznámit a pro porozumění budete potřebovat pouze pouze být obeznámeni se základními koncepty moderního programování -- jmenovitě objektově orientované programování (OOP), objektově relační mapování (ORM) a rapidní vývoj aplikací (RAD). Jediný nutný technický předpoklad je znalost PHP 5.