Symfony2

Mateusz Angulski

Powstała: 25 luty 2012

Zaktualizowana: 25 listopada 2013

Symfony2, nie Symfony 2

Source: http://butterfly88.blog.com/tag/why/

Plan prezentacji

Podstawy

Dlaczego akurat Symfony2 ?

Kilka podstawowych powodów

Dlaczego jest uważany za profesjonalne narzędzie

Kontener Dependency Injection

    use Politechnika\PrezentacjaBundle\Mailer;

    $mailer = new Mailer('sendmail');
    $mailer->send('angul@polibuda.pl', '...' );
  

Powiedzmy, że mamy podobne wywołania rozporoszone po całym projekcie i chcemy teraz zmienić mailera na coś innego.

Najlepiej wytłumaczyć kontenerowi co ma robić jak ktoś potrzebuje mailera

    services:
      fancy_mailer:
        class:        Politechnika\PrezentacjaBundle\Mailer
        arguments:    [sendmail]
  

Konfiguracja serwisu

Teraz jeśli potrzebujesz skorzystać z obiektu (serwisu) mailera wystarczy

    class PrzykladowyKontroler extends Controller
    {
      public function sendAction()
      {
        $mailer = $this->get('fancy_mailer');
        $mailer->send('angul@polibuda.pl', '...' );
      }
    }

W dowolnym fragmencie kodu mającego dostęp do kontenera

Zdarzenia

Integracja ErrbitPHP z Symfony2

Struktura projektu jest dowolna, ale w dystrybucji Standard Edition rekomendowany jest następujący układ

app/ - konfiguracja aplikacji
src/ - kod PHP
vendor/ - biblioteki zewnętrzne
web/ - główny katalog aplikacji

Może ulec zmianie w wersji 2.4

System bundli

Etapy powstawania bundla

System bundli

Struktura plików zgodna z dobrymi praktykami

Politechnika/
     PrezentacjaBundle/
        PrezentacjaBundle.php
        Controller/
        Resources/
            meta/
                LICENSE
            config/
            doc/
                index.rst
            translations/
            views/
            public/
        Tests/

Przykładowy szblon w twigu

    
    <!DOCTYPE html>
      <html>
        <head>
          <title>Moja super strona</title>
        </head>
        <body>
          <ul id="navigation">
            {% for item in navigation %}
            <li><a href="{{ item.href }}">{{ item.caption }}</a></li>
            {% endfor %}
          </ul>

          <h1>Moja super strona</h1>
          {{ a_variable }}
        </body>
      </html>
  

System bundli

Logiczna ścieżka do pliku bundla

@PolitechnikaPrezentacjaBundle/Controller/DefaultController.php
odpowiada
src/Politechnika/PrezentacjaBundle/Controller/DefaultController.php

System bundli

Logiczna ścieżka do metody kontrolera

PolitechnikaPrezentacjaBundle:Default:index
odpowiada
Politechnika\PrezentacjaBundle\Controller\DefaultController::indexAction()

System bundli

Logiczna ścieżka do templatki twigowej

PolitechnikaPrezentacjaBundle:Borrow:index.html.twig
odpowiada
src/Politechnika/PrezentacjaBundle/Resources/views/Borrow/index.html.twig

Konsola

Przykładowe polecenia

php app/console cache:clear
php app/console router:debug -env=prod
php app/console generate:bundle

Koniec teorii

Postawmy na szybko jakąś stronę

Przydatne linki

Oficjalna strona Symfony

Lista komponentów Symfony2

Wymagania Symfony2

Symfony2, nie Symfony 2

Wiele innych

Dzięki za wysłuchanie
:-]