Development

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

You must first sign up to be able to contribute.

Rozdział 1 - Wprowadzenie do Symfony

Jakie korzyści może Ci przynieść korzystanie z frameworka symfony? Jakie są jego wymagania? Ten rozdział odpowie na te pytania.

Framework Symfony w skrócie

Framework usprawnia proces powstawania aplikacji poprzez automatyzację wielu elementów potrzebnych do osiągnięcia zamierzonego celu. Framework wprowadza porządek w strukturze kodu co pomaga programiście w pisaniu lepszego, bardziej czytelnego oraz prostszego w utrzymaniu kodu. Programowanie dzięki frameworkowi staje się prostsze dzięki sprowadzaniu złożonych operacji do prostych instrukcji.

Symfony to pełny framework zaprojektowany by dzięki kilku kluczowym cechom zoptymalizować proces tworzenia aplikacji internetowych. Przede wszystkim oddziela od siebie logikę biznesową, model danych oraz interfejs użytkownika. Zawiera wiele gotowych narzędzi oraz klas napisanych po to by skrócić proces tworzenia złożonych aplikacji internetowych. Symfony pozwala zautomatyzować szereg podstawowych czynności co pozwala programiście skupić się na specyfice tworzonej aplikacji. W rezultacie nie musimy wynajdywać koła na nowo za każdym razem kiedy tworzymy nową aplikację internetową.

Symfony zostało napisane w całości w PHP5. Zostało sprawdzone podczas tworzenia dużej ilości projektów oraz jest aktualnie używane na wielu wymagających stronach biznesowych. Framework symfony jest kompatybilny z najpopularniejszymi serwerami baz danych, takimi jak MySQL, PostgreSQL, Oracle, oraz Microsoft SQL Server. Działa zarówno na platformach *nix jak i Windows. Przyjrzyjmy się bliżej cechom symfony:

Możliwości Symfony

Symfony zostało napisane tak by sprostać następującym wymaganiom:

  • Łatwość w instalacji oraz konfiguracji na większości platformach (i gwarantowana praca na platformach *nix i Windows).
  • Niezależność od systemu bazodanowego.
  • Łatwość w użyciu w najprostszych przypadkach lecz jednocześnie elastyczność pozwalająca na adaptację do skomplikowanych warunków.
  • Bazowanie na domyślnej, zdefiniowanej konfiguracji. Programista korzysta z własnej konfiguracji jedynie w nieszablonowych przypadkach.
  • Zgodność z najlepszymi standardami oraz wzorcami budowy aplikacji internetowych.
  • Gotowość do wdrożeń w dużych przedsiębiorstwach oraz elastyczność przy istniejących rozwiązaniach oraz architekturze w branży IT. Elastyczność zachowana jednak na tyle by doskonale radzić sobie z długoterminowymi projektami.
  • Czytelność kodu oraz dokumentacja w standardzie phpDocumentator w celu łatwiejszego utrzymania źródeł aplikacji.
  • Łatwość rozbudowy oraz możliwość integracji z innymi bibliotekami.

Automatyzacja w projektach internetowych

Większość procesów i zadań wykonywanych przy okazji projektów internetowych została zautomatyzowana. Oto lista rzeczy, które między innymi upraszcza symfony:

  • Wbudowana internacjonalizacja pozwala na tłumaczenie w zależności od lokalizacji zarówno prezentowanych danych jak i interfejsu.
  • Warstwa prezentacji wykorzystuje szablony oraz układy stron które mogą być tworzone przez webmasterów nie posiadającej żadnej wiedzy na temat frameworka. Helpery (helpers) redukują ilość kodu w warstwie prezentacji dzięki zamknięciu dużej ilości operacji w wywołaniach pojedynczych funkcji.
  • Formularze wspiera zautomatyzowany system walidacji, pozwalający na ponowne wypełnianie formularzy w przypadku błędów - zapewnia to lepszą jakość danych w bazie danych oraz lepsze interakcje z użytkownikiem.
  • Automatyczna ochrona przed atakami polagającymi na wprowadzaniu niepoprawnych danych ("output escaping").
  • Narzędzia do zarządzania cachem redukują obciążenie łącza oraz serwera.
  • Metody uwierzytelniania oraz nadawania uprawnień ułatwiają tworzenie zabezpieczonych aplikacji oraz tworzenie mechanizmów zarządzania uprawnieniami użytkowników.
  • System przekierowań (ang: routing) oraz przyjazne adresy URL wpływają korzystnie na jakość indeksowania aplikacji przez wyszukiwarki internetowe.
  • Wbudowane narzędzia e-mail oraz zarządzanie API pozwalają na wyjście poza klasyczny stereotyp korzystania z aplikacji tylko przez przeglądarkę internetową.
  • Dzięki mechanizmom stronicowania, sortowania oraz filtrowania prezentowane listy danych są bardziej przyjazne oraz funkcjonalne dla użytkowników.
  • Generatory oraz wtyczki i rozszerzenia zwiększają możliwości rozszerzania zarówno aplikacji jak i frameworka.
  • Mechanizmy bazujące na AJAX są łatwe do wdrożenia dzięki helperom,za pomocą których w jednej linii można wygenerować efekty w JavaScript kompatybilne ze wszystkimi przeglądarkami.

Środowisko deweloperskie oraz narzędzia

By spełnić wymagania przedsiębiorstw posiadających własne wytyczne dotyczące kodu oraz reguły zarządzania projektem, symfony może być dostosowane do dowolnych potrzeb. Domyślnie framework ten dostarcza kilka środowisk deweloperskich praz oferuje pakiet narzędzi automatyzujących popularne czynności:

  • Narzędzia służące do generowania kodu doskonale sprawdzają się przy prototypowaniu oraz tworzeniu zaplecza administracyjnego.
  • Wbudowane narzędzia służące do testów, pozwalają na tworzenie oprogramowania zgodnie z założeniami Test-Driven Development (TDD).
  • Panel debugowania przyspiesza proces wykrywania i usuwania błędów poprzez wyświetlanie wszelkich informacji jakich programista może potrzebować na stronie, nad którą aktualnie pracuje.
  • Interfejs linii komend pozwalana na błyskawiczne wdrażanie projektów na serwer produkcyjny bezpośrednio z serwera deweloperskiego.
  • Szybka konfiguracja przyśpiesza prace oraz czyni ją bardziej efektywną.
  • Logowanie zdarzeń pozwala administratorowi na szczegółowy wgląd w działanie aplikacji.

Kto i dlaczego stworzył Symfony?

Pierwsza wersja frameworka symfony została opublikowana w październiku 2005 r. przez jego fundatora Fabiena Potencier, który jest jednocześnie współautorem tej książki. Fabien jest prezesem Sensio (http://www.sensio.com), francuskiej agencji e-marketingowej dobrze znanej z innowacyjnego podejścia do tworzenia projektów internetowych.

Cofnijmy się do 2003 r., Fabien poświęcił sporo czasu studiując istniejące narzędzia służące do budowy aplikacji internetowych napisane w PHP. Nie udało mu sie jednak znaleźć żadnego, które spełniłoby w pełni jego oczekiwania. Kiedy zostało wydane PHP5 Fabien uznał, że istniejące rozwiązania osiągnęły odpowiedni poziom, pozwalający na zbudowanie z nich pełnego frameworka. Spędził rok z powodzeniem budując serce symfony opierając swoje prace o Mojavi - framework z rodziny Model-View-Controller (MVC), Propel - narzędzie służące do mapowania relacyjno-obiektowego oraz zbiór pomocników (helpers) dla szablonów zaczerpniętych z Ruby on Rails.

Początkowo Fabien stworzył symfony dla projektów realizowanych przez Sensio, ponieważ efektywny framework był doskonałym narzędziem do pokazania szybszego oraz bardziej wydajnego tworzenia aplikacji. Sprawiło to, że tworzenie aplikacji internetowych stało się bardziej intuicyjne a w rezultacie aplikacje stały się bardziej solidne i prostsze w rozwoju. Pierwszym poważnym testem dla symfony był serwis typu e-commerce sprzedający odzież. Później symfony zostało wykorzystane również do budowy kilku mniejszych projektów.

Po pomyślnych wdrożeniach w kolejnych projektach Fabien postanowił opublikować symfony na licencji Open Source. Zrobił to by wesprzeć społeczność swoją pracą oraz by uzyskać informacje zwrotne od społeczności na temat swojego działa. Zrobił to także aby pokazać doświadczenie Sensio oraz ... dla frajdy.

NOTE Dlaczego "symfony" a nie np. "JakiśTamFramework"? Ponieważ Fabien chciał aby nazwa zawierała literę s (od nazwy Sensio) oraz literę f (od słowa framework) a ponadto by nazwa była łatwa do zapamiętania i nie kojarzyła się z innym narzędziem deweloperskim. Ponadto Fabien nie lubi nazw pisanych kapitalikami, więc symfony wydawało się idealne nawet jeśli nie do końca jest po angielsku. Poza tym nazwa ta nie była zarezerwowana i można było użyć jej jako nazwę dla projektu. Rozważaną alternatywą było "baguette".

Aby symfony pomyślnie stało się prawdziwym projektem open source potrzebowało rozległej dokumentacji. Dla podniesienia rangi przedsięwzięcia dokumentacja powinna była być napisana po angielsku. Fabien poprosił więc François Zaninotto swojego współpracownika z Sensio, również autora tejże książki, aby zagłębił się w kod źródłowy oraz napisał na jego podstawie książkę dostępną online. Zajęło to dość sporo czasu, ale kiedy projekt stał się dostępny publicznie, prace nabrały tempa dzięki licznemu wsparciu wielu programistów zachwyconych frameworkiem. Reszta to już historia.

Społeczność Symfony

Niedługo po tym jak strona projektu symfony (http://www.symfony-project.com) została uruchomiona wielu programistów z całego świata ściągnęło oraz zainstalowało framework, przeczytało dokumentację oraz stworzyło swoje pierwsze projekty przy użyciu symfony. W ten sposób sprawy nabrały tempa.

W tym czasie frameworki dla aplikacji internetowych stały się bardzo popularne a zapotrzebowanie na bardzo dobry framework napisany w PHP stawało się bardzo duże. Symfony oferowało fascynujące rozwiązania z powodu doskonałej jakości i robiącego wrażenie kodu oraz obszernej dokumentacji - dwie główne cechy dzięki, którym symfony górowało nad konkurentami. Wtedy właśnie pojawiło się wiele osób skłonnych do pomocy, proponujących różnego rodzaju poprawki oraz usprawnienia, dokonujących korekt dokumentacji oraz angażujących się we wszelką pomoc.

Publiczne repozytorium kodu oraz system zadań (trac) pozwala na wiele dróg rozwoju a wszyscy ochotnicy zawsze są mile widziani. Fabien nadal jest najbardziej aktywnym autorem w głównej gałęzi repozytorium i gwarantuje stałą, wysoką jakość kodu.

Dziś forum symfony, listy mailingowe oraz kanał IRC (Internet Relay Chat) stanowią doskonałe wsparcie a każde, nawet pozornie banalne pytanie doczekuje się średnio czterech odpowiedzi. Wielu użytkowników instaluje symfony każdego dnia a wiki oraz dział zawierający fragmenty kodu (snippets) codziennie goszczą wielu czytelników. Liczba znanych, nowych aplikacji, stworzonych dzięki symfony sięga średnio pięciu każdego tygodnia i cały czas rośnie.

Społeczność skupiona wokół symfony jest trzecią siłą tego frameworka. Mamy nadzieje, że przyłączysz się po przeczytaniu tej książki.

Czy Symfony jest dla mnie?

Niezależnie od tego czy jesteś ekspertem PHP5 czy początkującym programistą aplikacji internetowych będziesz w stanie używać symfony. Głównym czynnikiem decydującym czy skorzystać z tego frameworka czy tego nie robić, jest skala Twojego projektu.

Jeśli planujesz napisać prostą aplikację zawierającą kilka podstron, posiadającą ograniczony dostęp do bazy danych oraz nie planujesz zagwarantować jej wysokiej jakości czy dokumentacji powinieneś trzymać się tradycyjnego PHP. W takiej sytuacji nie zyskałbyś nic korzystając z frameworka a korzystając z modelu zorientowanego obiektowego czy z modelu MVC spowolniłbyś tylko proces tworzenia. Notabene symfony nie jest dobrze zoptymalizowane do uruchamiania go w środowisku gdzie skrypty PHP działają w trybie Common Gateway Interface (CGI).

Z drugiej strony jeśli planujesz rozwój bardziej złożonej aplikacji ze skomplikowaną logiką biznesową, samo PHP nie wystarczy. Jeśli planujesz w przyszłości utrzymywać lub rozwijać swoją aplikację, potrzebujesz aby twój kod był lekki, czytelny oraz bardzo efektywny. Jeśli chcesz korzystać z najnowszych trendów w interakcjach z użytkownikiem (AJAX) i obić to w intuicyjny sposób, nie możesz tak po prostu napisać kilku setek linii kodu JavaScript. Jeżeli chcesz pisać z radością oraz robić to szybko samo PHP najprawdopodobniej zawiedzie Cię. We wszystkich tych przypadkach symfony jest dla Ciebie.

Oczywiście jeśli jesteś doświadczonym deweloperem zapewne znasz już wszystkie korzyści płynące ze stosowania frameworka do budowy aplikacji. Jedyne czego potrzebujesz to znaleźć taki, który jest dojrzały, dobrze udokumentowany oraz posiadający dużą społeczność. Nie szukaj dalej, symfony jest rozwiązaniem dla Ciebie.

TIP Jeżeli potrzebujesz wizualnej demonstracji, obejrzyj prezentacje (screencasts) dostępne na stronie symfony. Zobaczysz jak szybko i z jaką łatwością można tworzyć dzięki symfony.

Podstawowe pojęcia

Zanim zaczniesz przygodę z symfony powinieneś zrozumieć i poznać kilka podstawowych rzeczy. Śmiało możesz pominąć ten fragment jeśli pojęcia takie jak OOP, ORM, RAD, DRY, KISS, TDD, YAML oraz PEAR są dla ciebie jasne.

PHP5

Symfony zostało napisane w PHP5 (http://www.php.net) jako framework służący do budowania aplikacji internetowych w tym samym języku, w którym zostało napisane. Stąd właśnie solidna znajomość PHP5 jest podstawowym wymogiem dla stosowania symfony.

Programiści, którzy znają już PHP4 powinni skupić się przede wszystkim na nowym modelu obiektowym, który został wprowadzony w PHP5.

Programowanie zorientowane obiektowo (OOP)

Programowanie zorientowane obiektowo (OOP) po angielsku nazywane Object-Oriented Programming nie będzie omówione w tym rozdziale. Wymagałoby to napisania oddzielnej książki. Ponieważ symfony wykorzystuje w całości mechanizmy OOP dostępne w PHP5, znajomość tychże mechanizmów jest jednym z warunków jakie należy spełnić by zacząć naukę symfony.

Programowanie obiektowe Wikipedia definiuje w następujący sposób (przekład z Wikipedii anglojęzycznej):

"Idea przyświecająca programowaniu obiektowemu mówi, że aplikacja może być postrzegana jako zbiór część oraz obiektów połączonych wzajemnymi zależnościami i wpływającymi na siebie. Podejście to jest zgoła inne od tradycyjnego, które mówi, że programy oraz aplikacje to zbiory funkcji bądź instrukcji dla komputera."

PHP5 implementuje większość paradygmatów OOP takich jak klasy, obiekty, metody, dziedziczenie oraz wiele innych. Osoby, które nie są zaznajomione z tymi mechanizmami i z ideą OOP powinny najpierw zapoznać się z dokumentacją na stronie http://www.php.net/manual/en/language.oop5.basic.php.

Metody magiczne

Jedną z silnych zalet obiektów w PHP jest możliwość wykorzystania metod magicznych. Metody te mogę być stosowane do nadpisywania standardowego zachowania klas bez modyfikacji zewnętrznego kodu. Sprawiają, że składnia PHP jest mniej rozległa i bardziej rozszerzalna. Metody te są łatwe do rozpoznania, ponieważ ich nazwy zaczynają się zawsze od dwóch znaków podkreślenia (__).

Na przykład kiedy wyświetlamy obiekt, PHP domyślnie wywoła funkcję __toString() na wyświetlanym obiekcie aby uzyskać uprzednio zdefiniowany przez programistę format wyświetlania:

[php]
$myObject = new myClass();
echo $myObject;
// Powyższy kod jest tożsamy z poniższym wywołaniem metody magicznej __toString()
echo $myObject->__toString();

Symfony korzysta z metod magicznych, więc powinieneś dokładnie znać ich działanie. Wszystkie metody magiczne są opisane w dokumentacji PHP (http://www.php.net/manual/en/language.oop5.magic.php).

Rozszerzenia PHP i repozytorium rozszerzeń (PEAR)

PEAR jest "systemem dystrybucji rozszerzeń do języka PHP". PEAR pozwala Ci pobierać, instalować, aktualizować skrypty PHP. Kiedy używasz paczek PEAR, nie musisz martwić się o to, gdzie umieścić skrypt, jak je uczynić dostępnymi lub jakie są możliwości rozszerzenia interfejsu linii poleceń (CLI).

PEAR jest projektem społecznościowym, napisanym w PHP i dystrybuowanym ze standardowymi wersjami tegoż języka.

TIP Na stronie domowej PEAR, http://pear.php.net, można znaleźć dokumentację oraz paczki pogrupowane w kategorie.

PEAR jest jednym z najbardziej profesjonalnych sposobów instalacji dystrybuowanych bibliotek PHP. Symfony radzi aby korzystać z frameworka zainstalowanego przez PEAR jako części wspólnej dla wielu projektów. Wtyczki dla symfony są paczkami PEAR ze specjalną konfiguracją. Również sam framework symfony jest dostępny jako paczka PEAR.

Nie musisz znać całej składni poleceń PEAR aby korzystać z symfony. Jedyne co jest wymagane to posiadanie zainstalowanego repozytorium PEAR oraz świadomość czym ono jest. Aby sprawdzić czy PEAR jest zainstalowane wystarczy wpisać w linii komend (CLI) następującą komendę:

> pear info pear

Polecenie to zwróci informację o wersji zainstalowanego repozytorium PEAR.

Projekt symfony posiada własne repozytorium oraz kanał PEAR. Zwróć uwagę na to, iż kanały PEAR pojawiły się dopiero w wersji 1.4.0. Więc jeśli posiadasz niższą wersję repozytorium musisz je uaktualnić. Aby to zrobić wpisz w CLI następującą komendę:

> pear upgrade PEAR

Mapowanie relacyjno-obiektowe (ORM)

Bazy danych w większości są relacyjne a PHP 5 oraz symfony są zorientowane obiektowo. Aby umożliwić dostęp do bazy danych w sposób zgodny z ideą programowania obiektowego musimy posiadać interfejs zmieniający logikę z obiektowej na relacyjną. Taki interfejs jest nazywany mapowaniem relacyjno-obiektowym bądź w skrócie mówi się o nim ORM (object-relational mapping).

ORM składa się z obiektów, które zachowują relacje między sobą i jednoczenie umożliwiają dostęp do danych.

Główną korzyścią stosowania abstrakcyjnej warstwy relacyjno-obiektowej jest unikanie stosowania składni typowej dla specyficznej bazy danych. Zastosowany abstrakt automatycznie przetłumaczy wywołania obiektowe na język SQL odpowiedni dla danej bazy danych, przy zachowaniu optymalizacji tworzonych kwerend.

To wszystko oznacza, że przejście na inną bazę danych w środku trwania projektu jest stosunkowo łatwe.Wyobraź sobie, że szybko musisz stworzyć prototyp aplikacji ale klient nie zdecydował się, która baza danych najlepiej zaspokoi jego potrzeby. Dla przykładu możesz rozpocząć prace z bazą SQLite i kiedy klient podejmie decyzję przenieść projekt na MySQL, PostgreSQL czy Oracle. Wystarczy zmiana jednej linii kodu w pliku konfiguracyjnym - i już wszystko działa.

Wartswa abstrakcyjna enkapsuluje logikę danych. Pozostała część aplikacji nie potrzebuje informacji na temat zapytań SQL wysyłanych do bazy danych a sama treść zapytań jest łatwa do znalezienie. Programiści specjalizujący się w bazach danych wiedzą dokładnie gdzie go szukać.

Wykorzystując obiekty zamiast rekordów i klasy zamiast tabel zyskujesz jeszcze inną korzyść: możesz dodać nowe elementy do Twoich tabel. Na przykład, jeżeli masz tabelę nazywaną Client z dwoma polami, FirstName i LastName, możesz chcieć wybrać od razu Name (połączenie FirstName i LastName). W świecie zorientowanym obiektowo jest to tak łatwe, że równa się dodawaniu kolejnej metody dostępowej w klasie Client, czyli:

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

Wszystkie tego typu funkcje dostępu do danych z logiką biznesową można umieszczać w obiektach podobnych jak ten powyżej. Na przykład, rozważmy klasę ShoppingCart, w której trzymasz różne produkty (które są przecież obiektami). Aby zwrócić wartość wszystkich elementów w koszyku reprezentującym zamówienie, możesz dodać metodę getTotal(), np. taką:

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

I to wszystko. Wyobraź sobie ile czasu zajęło by Ci napisanie zapytania SQL robiącego te same rzeczy!

Propel to kolejny projekt open source, który jest obecnie jednym z najlepszych abstraktów relacyjno-obiektowych dla PHP 5. Symfony integruje Propel na tyle silnie, że większość przykładów napisanych w tej książce jest napisanych zgodnie z jego składnią. Niniejsza książka opisuje podstawowe sposoby użycia Propela lecz dla bardziej skomplikowanych przykładów jego użycia polecamy odwiedzić stronę projektu Propel (http://propel.phpdb.org/trac).

Rapid Application Development (RAD)

Programowanie aplikacji internetowych przez długi czas było powolną i mozolną pracą. Zazwyczaj typowe cykle tworzenia aplikacji (na przykład takie jak Rational Unified Process) nie mogły się rozpocząć bez zdefiniowania wymagań, narysowania wielu diagramów UML (Unified Modeling Language) i spisania ton arkuszy dokumentacji wstępnej. Było to spowodowane ogólną szybkością ówczesnego tworzenia aplikacji, brakami we wszechstronności języków programowania (należało zbudować aplikację, skompilować ją, uruchomić ponownie i kto wie co jeszcze zrobić zanim mieliśmy okazję ujrzeć ją działającą) i przede wszystkim tym, że klienci byli całkiem rozsądni i rzadko zmieniali swoje zdanie.

Dziś interesy prowadzone są dużo szybciej a klienci mają zwyczaj częstych zmian swojego zdania w samym środku procesu tworzenia aplikacji. Oczywiście zawsze liczą, że zespół programistów dostosuje się do nowych pomysłów i potrzeb oraz przebuduje aplikację jak najszybciej. Na szczęście wykorzystanie skryptowych języków programowania pozwala na swobodne wykorzystanie takich strategii programowania jak Rapid Application Development (RAD) lub Agile.

Jedną z idei stojących za wspomnianymi metodologiami jest rozpoczęcie tworzenia oprogramowania jak najszybciej to możliwe tak aby klient miał wgląd w prototyp w chwili jego tworzenia oraz mógł oferować alternatywne kierunki rozwoju. Podejście takie pozwala na budowanie aplikacji w sposób iteracyjny. Oznacza to tworzenie kolejnych wersji bogatszych funkcjonalnie w stosunku do pierwowzoru w krótkich odstępach czasu.

Dla programisty konsekwencje są liczne. Nie musi on myśleć o przyszłości kiedy implementuje daną funkcjonalność. Metoda implementacji powinna być na tyle prosta na ile jest to możliwe. Zasadę tą świetnie ilustruje zasada KISS, czyli skrót od maksymy Keep It Simple, Stupid.

Kiedy wymagania się zmieniają lub wymagana jest dodatkowa funkcjonalność część kodu zazwyczaj wymaga napisania na nowo. Proces ten zwany jest refaktoringiem i zdarza się dość często w przypadku tworzenia aplikacji internetowych. Jedne fragmenty kodu są przenoszone w inne miejsca zgodnie ze swoją naturą oraz przeznaczeniem inne natomiast zamieniane na mniejsze fragmenty zgodnie z zasadą Don't Repeat Yourself (DRY) co po polsku oznacza po prostu: Nigdy nie powtarzaj sam siebie.

Aby mieć pewność, że aplikacja działa pomimo dokonywania w niej stałych zmian wymagany jest cały zestaw testów jednostkowych, które można wykonywać automatycznie. Dobrze napisane testy jednostkowe mogą być solidnym sposobem aby upewnić się, że wszystko działa poprawnie oraz nie ma żadnych problemów spowodowanych [rzez refaktoryzację kodu. Pewne metodologi przewidują nawet pisanie testów kodu zanim ów kod powstanie. Działanie takie jest zwane test-driven development (TDD).

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

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

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

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"

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 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 Specyfikacja formatu YAML jest dostępna na stronie http://www.yaml.org.

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.

Podsumowanie

Symfony jest frameworkiem napisanym w PHP5, służącym do budowy aplikacji internetowych. Wprowadza nakładkę na język PHP dodając narzędzia, które przyspieszają rozwój złożonych aplikacji internetowych. Niniejsza książka wprowadzi Cię w świat symfony. Jedyne czego potrzebujesz to znajomość nowoczesnch technik programowania oraz nowych technologii, takicch jak programowanie obiektowe (OOP), mapowanie relacyjno-obiektowe (ORM) oraz RAD (Rapid Application Development). Jedynym technicznym wymogiem jest znajomość PHP5.