Development

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

You must first sign up to be able to contribute.

Version 1 (modified by Vit.Kotacka, 10 years ago)
--

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.

Pozn. 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.

Whether you are a PHP 5 expert or a newcomer to web application programming, you will be able to use symfony. The main factor in deciding whether or not to do so is the size of your project.

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.

If you want to develop a simple website with five to ten pages, limited access to a database, and no obligations to ensuring its performance or providing documentation, then you should stick with PHP alone. You wouldn't gain much from a web application framework, and using object orientation or an MVC model would likely only slow down your development process. As a side note, symfony is not optimized to run efficiently on a shared server where PHP scripts can run only in Common Gateway Interface (CGI) mode.

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.

On the other hand, if you develop more complex web applications, with heavy business logic, PHP alone is not enough. If you plan on maintaining or extending your application in the future, you will need your code to be lightweight, readable, and effective. If you want to use the latest advances in user interaction (like Ajax) in an intuitive way, you can't just write hundreds of lines of JavaScript. If you want to have fun and develop fast, then PHP alone will probably be disappointing. In all these cases, symfony is for you.

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.

And, of course, if you are a professional web developer, you already know all the benefits of web application frameworks, and you need one that is mature, well documented, and has a large community. Search no more, for symfony is your solution.

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.

TIP If you would like a visual demonstration, take a look at the screencasts available from the symfony website. You will see how fast and fun it is to develop applications with symfony.

Základní koncepty

Fundamental Concepts

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.

Before you get started with symfony, you should understand a few basic concepts. Feel free to skip ahead if you already know the meaning of OOP, ORM, RAD, DRY, KISS, TDD, YAML, and PEAR.

PHP 5

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.

Symfony is developed in PHP 5 (http://www.php.net/) and dedicated to building web applications with the same language. Therefore, a solid understanding of PHP 5 is required to get the most out of the framework.

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.

Developers who already know PHP 4 but not PHP 5 should mainly focus on the language's new object-oriented model.

Objektově orientované programování (OOP)

Object-Oriented Programming (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.

Object-oriented programming (OOP) will not be explained in this chapter. It needs a whole book itself! Because symfony makes extensive use of the object-oriented mechanisms available as of PHP 5, OOP is a prerequisite to learning symfony.

Wikipedia vysvětluje OOP následovně:

Wikipedia explains OOP as follows:

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č.

The idea behind object-oriented programming is that a computer program may be seen as comprising a collection of individual units, or objects, that act on each other, as opposed to a traditional view in which a program may be seen as a collection of functions, or simply as a list of instructions to the computer.

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.

PHP 5 implements the object-oriented paradigms of class, object, method, inheritance, and much more. Those who are not familiar with these concepts are advised to read the related PHP documentation, available at http://www.php.net/manual/en/language.oop5.basic.php.

Magické metody

Magic Methods

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 (__).

One of the strengths of PHP's object capabilities is the use of magic methods. These are methods that can be used to override the default behavior of classes without modifying the outside code. They make the PHP syntax less verbose and more extensible. They are easy to recognize, because the names of the magic methods start with two underscores (__).

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();

For instance, when displaying an object, PHP implicitly looks for a __toString() method for this object to see if a custom display format was defined by the developer:

[php]
$myObject = 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).

Symfony uses magic methods, so you should have a thorough understanding of them. They are described in the PHP documentation (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 is "a framework and distribution system for reusable PHP components." PEAR allows you to download, install, upgrade, and uninstall PHP scripts. When using a PEAR package, you don't need to worry about where to put scripts, how to make them available, or how to extend the command-line interface (CLI).

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

PEAR is a community-driven project written in PHP and shipped with standard PHP distributions.

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

TIP The PEAR website, http://pear.php.net/, provides documentation and packages grouped by categories.

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.

PEAR is the most professional way to install vendor libraries in PHP. Symfony advises the use of PEAR to keep a central installation point for use across multiple projects. The symfony plug-ins are PEAR packages with a special configuration. The symfony framework itself is available as a PEAR package.

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.

You don't need to know all about the PEAR syntax to use symfony. You just need to understand what it does and have it installed. You can check that PEAR is installed in your computer by typing the following in a CLI:

> pear info pear

This command will return the version number of your PEAR installation.

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

The symfony project has its own PEAR repository, or channel. Note that channels are available only since version 1.4.0 of PEAR, so you should upgrade if your version is older. To upgrade your version of PEAR, issue the following command:

> pear upgrade PEAR

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

Object-Relational Mapping (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.

Databases are relational. PHP 5 and symfony are object-oriented. In order to access the database in an object-oriented way, an interface translating the object logic to the relational logic is required. This interface is called an object-relational mapping, or ORM.

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

An ORM is made up of objects that give access to data and keep business rules within themselves.

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.

One benefit of an object/relational abstraction layer is that it prevents you from using a syntax that is specific to a given database. It automatically translates calls to the model objects to SQL queries optimized for the current database.

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.

This means that switching to another database system in the middle of a project is easy. Imagine that you have to write a quick prototype for an application, but the client has not decided yet which database system would best suit his needs. You can start building your application with SQLite, for instance, and switch to MySQL, PostgreSQL, or Oracle when the client is ready to decide. Just change one line in a configuration file, and it works.

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.

An abstraction layer encapsulates the data logic. The rest of the application does not need to know about the SQL queries, and the SQL that accesses the database is easy to find. Developers who specialize in database programming also know clearly where to go.

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();
}

Using objects instead of records, and classes instead of tables, has another benefit: you can add new accessors to your tables. For instance, if you have a table called Client with two fields, FirstName and LastName, you might like to be able to require just a Name. In an object-oriented world, this is as easy as adding a new accessor method to the Client class, like this:

[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;
}

All the repeated data-access functions and the business logic of the data can be maintained within such objects. For instance, consider a class ShoppingCart in which you keep items (which are objects). To retrieve the full amount of the shopping cart for the checkout, you can add a getTotal() method, like this:

[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é.

And that's it. Imagine how long it would have required to write a SQL query doing the same thing!

Propel, další open source projekt, je v současnosti jedenou 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/).

Propel, another open source project, is currently one of the best object/relational abstraction layers for PHP 5. Symfony integrates Propel seamlessly into the framework, so most of the data manipulation described in this book follows the Propel syntax. This book will describe how to use the Propel objects, but for a more complete reference, a visit to the Propel website (http://propel.phpdb.org/trac/) is recommended.

Rapidní vývoj aplikací (RAD)

Rapid Application Development (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.

Programming web applications has long been a tedious and slow job. Following the usual software engineering life cycles (like the one proposed by the Rational Unified Process, for instance), the development of web applications could not start before a complete set of requirements was written, a lot of Unified Modeling Language (UML) diagrams were drawn, and tons of preliminary documentation were produced. This was due to the general speed of development, to the lack of versatility of programming languages (you had to build, compile, restart, and who knows what else before actually seeing your program run), and most of all, to the fact that clients were quite reasonable and didn't change their minds constantly.

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.

Today, business moves faster, and clients tend to constantly change their minds in the course of the project development. Of course, they expect the development team to adapt to their needs and modify the structure of an application quickly. Fortunately, the use of scripting languages like Perl and PHP makes it easy to apply other programming strategies, such as rapid application development (RAD) or agile software development.

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.

One of the ideas of these methodologies is to start developing as soon as possible so that the client can review a working prototype and offer additional direction. Then the application gets built in an iterative process, releasing increasingly feature-rich versions in short development cycles.

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).

The consequences for the developer are numerous. A developer doesn't need to think about the future when implementing a feature. The method used should be as simple and straightforward as possible. This is well illustrated by the maxim of the KISS principle: Keep It Simple, Stupid.

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).

When the requirements evolve or when a feature is added, existing code usually has to be partly rewritten. This process is called refactoring, and happens a lot in the course of a web application development. Code is moved to other places according to its nature. Duplicated portions of code are refactored to a single place, thus applying the Don't Repeat Yourself (DRY) principle.

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).

And to make sure that the application still runs when it changes constantly, it needs a full set of unit tests that can be automated. If well written, unit tests are a solid way to ensure that nothing is broken by adding or refactoring code. Some development methodologies even stipulate writing tests before coding--that's called test-driven development (TDD).

POZNÁMKA 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).

NOTE There are many other principles and good habits related to agile development. One of the most effective agile development methodologies is called Extreme Programming (abbreviated as XP), and the XP literature will teach you a lot about how to develop an application in a fast and effective way. A good starting place is the XP series books by Kent Beck (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.

Symfony is the perfect tool for RAD. As a matter of fact, the framework was built by a web agency applying the RAD principle for its own projects. This means that learning to use symfony is not about learning a new language, but more about applying the right reflexes and the best judgment in order to build applications in a more effective way.

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í.

The symfony project website proposes a step-by-step tutorial illustrating the development of an application in an agile way. It is called askeet (http://www.symfony-project.com/askeet), and is recommended reading for those who want to learn more about agile development.

YAML

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'
  )
);

According to the official YAML website (http://www.yaml.org/), YAML is "a straightforward machine parsable data serialization format designed for human readability and interaction with scripting languages." Put another way, YAML is a very simple language used to describe data in an XML-like way but with a much simpler syntax. It is especially useful to describe data that can be translated into arrays and hashes, like this:

[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"

This PHP array can be automatically created by parsing the YAML string:

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 čárkou. 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" }

In YAML, structure is shown through indentation, sequence items are denoted by a dash, and key/value pairs within a map are separated by a colon. YAML also has a shorthand syntax to describe the same structure with fewer lines, where arrays are explicitly shown with [] and hashes with {}. Therefore, the previous YAML data can be written in a shorter way, as follows:

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ů.

YAML is an acronym for Yet Another Markup Language and pronounced "yamel." The format has been around since 2001, and YAML parsers exist for a large variety of languages.

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

TIP The specifications of the YAML format are available at 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.

As you can see, YAML is much faster to write than XML (no more closing tags or explicit quotes), and it is more powerful than .ini files (which don't support hierarchy). That is why symfony uses YAML as the preferred language to store configuration. You will see a lot of YAML files in this book, but it is so straightforward that you probably don't need to learn more about it.

Shrnutí

Summary

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.

Symfony is a PHP 5 web application framework. It adds a new layer on top of the PHP language, providing tools that speed up the development of complex web applications. This book will tell you all about it, and you just need to be familiar with the basic concepts of modern programming to understand it--namely object-oriented programming (OOP), object-relational mapping (ORM), and rapid application development (RAD). The only required technical background is knowledge of PHP 5.