You are on page 1of 14

Laboratorium Symfony PHP Framework

Dokumentacja przygotowana dla Symfony w wersji 2.6.5 oraz PHP 5.5.15

Spis treci
1. Instalacja Symfony w rodowisku Windows.................................................................................... 2
2. Import i konfiguracja projektu w rodowisku Netbeans IDE........................................................... 7
3. Implementacja elementw aplikacji. ............................................................................................ 11
1. Instalacja Symfony w rodowisku Windows.

Istnieje co najmniej kilka moliwoci instalacji Symfony PHP na komputerze lokalnym. Do


celw laboratorium wybrano sposb zalecany przez oficjaln dokumentacj frameworka.

1.1. Wymagania wstpne

Na komputerze musi by zainstalowany interpreter PHP. Moe to by samodzielny pakiet, ale


najczciej PHP instalowane jest wraz z serwerem WWW Apache oraz systemem zarzdzania
bazami danych MySQL. Z punktu widzenia instalatora Symfony wane jest tylko to, aby PHP by
dostpny w wersji 5.4 lub wyszej.

Aby proces instalacji oraz inne czynnoci wymagajce uycia PHP w linii polece przebiega
sprawnie naley doda do zmiennej rodowiskowej PATH folder, w ktrym znajduje si plik
php.exe. Mona to zrobi dla caego systemu jak rwnie tylko dla aktualnie zalogowanego
uytkownika.

Wywietlamy okno waciwoci komputera a przechodzimy do opcji Zaawansowane ustawienia


systemu.

W otwartym oknie Waciwoci systemu wybieramy przycisk Zmienne rodowiskowe.

W zalenoci od tego czy chcemy doda interpreter PHP do zmiennej dla wszystkich uytkownikw
komputera czy tylko aktualnego uytkownika wyszukujemy zmiennej o nazwie PATH odpowiednio
na licie Zmienne systemowe lub Zmienne uytkownika dla [nazwa uzytkownika]. Dodajemy na
kocu po znaku ; ciek do folderu z plikiem php.exe. Po wybraniu OK zmiany zostan zapisane.
Jeeli linia komend bya uruchomiona przed wykonaniem powyszych czynnoci to aby zmiany byy
widoczne naley ponownie uruchomi wiersz polece.

W celu sprawdzenia czy podany efekt zosta osignity moemy wywoa funkcj php sprawdzajc
zainstalowan wersj interpretera:

1.2. Krok 1 pobieranie installera Symfony poprzez wiersz polece.

Tworzymy folder, w ktrym bd umieszczane nowe projekty Symfony PHP a


nastpnie pobieramy i zapisujemy w nim installer Symfony.
Ponisze polecenie wywouje funkcj readfile() pobierajc bajty znajdujce si pod
wskazanym adresem URL a nastpnie przekierowuj strumie do pliku o nazwie
symfony.phar.

php -r "readfile('http://symfony.com/installer');" > symfony.phar

Alternatywnym sposobem na pobranie pliku installera moe by wywoanie adresy


http://symfony.com/installer w oknie przegldarki a nastpnie zapisanie pliku symfony.phar
w folderze, w ktrym bd tworzone nowe projekty.

1.3. Krok 2 stworzenie nowego projektu Symfony.

Stworzenie nowego projektu polega na wywoaniu polecenia:

php symfony.phar new <nazwa_projektu> [wersja Symfony]

Gdzie <nazwa_projektu> jest nazw projektu ( i folderu jednoczenie) a [wersja Symfony] jest
parametrem opcjonalnym okrelajcym, ktra wersja Symfony ma zosta uyta dla projektu.
Installer utworzy nowy folder a nastpnie pobierze wymagane pliki frameworka i stworzy
podstawow struktur aplikacji. W zalenoci od szybkoci komputera i cza do Internetu
operacja moe potrwa od kilkudziesiciu sekund do kilku minut.

Jeeli proces instalacji przebieg prawidowo powinnimy ujrze komunikat podobny do


poniszego:
Przechodzimy do folderu z aplikacj i uruchamiamy wewntrzny serwer PHP.

cd symfapp

php app/console server:run

Jeeli serwer zosta uruchomiony zobaczymy informacj o adresie, pod ktrym nasza
aplikacja jest aktualnie dostpna.
1.4. Krok 3 uruchomienie aplikacji w przegldarce.

Po uruchomieniu okna przegldarki powinnimy ujrze stron startow aplikacji.

Jeeli jednak widok bardziej przypomina poniszy to naley uruchomi polecenie:

D:\_PROJEKTY\symfapp> php app/console assets:install --symlink web

Powysze polecenie buduje statyczne elementy (CSS, JavaScript, obrazy) dla rodowiska
produkcyjnego aplikacji. Wicej tutaj: http://symfony.com/blog/new-in-symfony-2-6-smarter-assets-install-command

Po ponownym uruchomieniu serwera i odwieeniu strony grafika oraz style powinny by na miejscu.
2. Import i konfiguracja projektu w rodowisku Netbeans IDE.
Netbeans IDE v. 8.0.2

2.1. Import gotowego projektu i konfiguracja dla wbudowanego serwera PHP.

Po uruchomieniu Netbeans IDE z menu File wybieramy

Nastpnie z drzewa kategorii wybieramy PHP a nastpnie

Klikamy Next >.

W polu Sources Folder: wskazujemy ciek do folderu z wczeniej utworzonym projektem


Symfony. Project Name: to nic innego jak nazwa projektu funkcjonujaca tylko w obrbie
Netbeans. Domylnie proponowana jest nazwa docelowego folderu z projektem. Jako wersj
PHP wybieramy PHP 5.5 chocia ma to tylko znaczenie kosmetyczne podpowiadanie i
sprawdzanie skadni. Kodowanie pozostawiamy ustawiona na UTF-8. Klikamy Next >.
W oknie Run Configuration w polu Run As: ustawiamy PHP Built-in Web Server a dla Router
Script ustawiamy ciek na web/app_dev.php. Ta ostatnia warto wskazuje na plik, ktry
peni funkcj Front Controllera aplikacji.

Netbeans jednak uruchamia serwer wbudowany PHP w nieco inny sposb ni komenda z
poziomu wiersza polece, wic na potrzeby laboratorium bdzie wykorzystywany
wbudowany serwer PHP uruchamiany poleceniem:

php app/console server:run

2.2. Konfiguracja projektu Symfony oraz Netbeans dla lokalnie zainstalowanego serwera
Apache.

Xampp 3.2.1
Apache 2.4.10

2.2.1. Krok 1 edycja pliku httpd.conf.

Naszym celem jest stworzenie wirtualnego hosta dla aplikacji co pozwala na moliwie
zbien konfiguracj rodowiska serwera lokalnego ze rodowiskiem produkcyjnym, na
ktrym aplikacja zostanie ostatecznie wdroona.

Naley uruchomi panel sterowania serwera Xampp i dla moduu Apache wybra opcj
Config a nastpnie z rozwinitej listy Apache (httpd.conf). Plik domylnie zostanie
otwarty w programie Notatnik.

Pierwsz czynnoci jest sprawdzenie czy modu przepisywanie adresw URL jest
wczony. Wyszukujemy lini LoadModule rewrite_module modules/mod_rewrite.so i
jeeli jest ona poprzedzona znakiem # usuwamy go. Znak # jest komentarzem
jednowierszowym i powoduje zignorowanie znajdujcego si za nim cigu znakw
przez interpreter pliku konfiguracyjnego.

Nastpnie szukamy linii Include conf/extra/httpd-vhosts.conf. Jeeli jest


odkomentowana (domylnie) to zapisujemy zmiany i zamykamy plik.

2.2.2. Krok 2 dodanie definicji Virtual Host w pliku httpd-vhosts.conf

Plik httpd-vhosts.conf znajduje si w <folder_instalacji_xampp>\apache\conf\extra np.


C:\xampp\apache\conf\extra\httpd-vhosts.conf. Plik ten zawiera zakomentowane dwa
przykady konfiguracji wirtualnego hosta, ale w naszym przypadku wykorzystamy
konfiguracj dostarczan przez twrcw Symfony PHP. Przykady znajdziemy pod adresem
http://symfony.com/doc/current/cookbook/configuration/web_server_configuration.html

Wykorzystamy pierwszy skrypt:

Na potrzeby naszej aplikacji skrypt zostanie przerobiony do postaci:

<VirtualHost *:80>
ServerName symfapp
DocumentRoot "D:\_PROJEKTY\symfapp\web"
<Directory "D:\_PROJEKTY\symfapp\web">
AllowOverride All
Require all granted
</Directory>
</VirtualHost>

Definicja wirtualnego hosta zawiera si midzy znacznikiem <VirtualHost *:80> a


</VirtualHost>. *80 oznacza, e dopasowanie nastpi dla serwera nasuchujcego na porcie
numer 80. Kolejna linia to definicja wirtualnej nazwy naszego serwera - ServerName symfapp.
Instrukcja DocumentRoot D:\_PROJEKTY\symfapp\web powoduje ustawienie wskazanego
folderu jako folderu gwnego naszej aplikacji. Dyrektywa <Directory [cieka]> grupuje inne
dyrektywy, ktre dotycz folderu ujtego w ciece. Dyrektywa AllowOverride All pozwala na
nadpisywanie (przecianie) dyrektyw dla danego folderu znajdujcych si w plikach .htaccess w
folderach aplikacji. Require all granted powoduje,e wszystkie dania s dozwolone, nie odbywa si
filtrowanie da np. pod ktem adresu serwera, nazwy.

http://httpd.apache.org/docs/2.4/vhosts/examples.html
http://httpd.apache.org/docs/2.4/mod/core.html#allowoverride
http://httpd.apache.org/docs/2.4/upgrading.html

2.3. Krok 3 edycja pliku C:\windows\system32\drivers\etc\hosts

Dla kadego wirtualnego hosta naley doda nowy wpis:

127.0.0.1 <nazwa_wirtualnego_hosta>

W naszym przypadku

127.0.0.1 symfapp

Zapisujemy zmiany w pliku.

2.4. Krok 4 edycja pliku /symfapp/web/.htaccess.

Jeeli plik nie by wczeniej edytowany zamieniamy lini 51 z postaci

RewriteRule .? %{ENV:BASE}/app.php [L]

na

RewriteRule .? %{ENV:BASE}/app_dev.php [L]

Po ponownym uruchomieniu serwera apache uruchamiamy adres http://symfapp w przegldarce.


Jeeli konfiguracja zostaa wykonana poprawnie powinnimy zobaczy znan ju nam stron z punkut
1.4.
3. Implementacja elementw aplikacji.

3.1. Tworzenie nowego pakietu (paczki, ang. bundle).

Elementy aplikacji takie jak kontrolery, dodatkowe klasy PHP, widoki i media (grafika, css,
JavaScript) przechowywane s w ramach pakietw, ktre mona docza do aplikacji. Nie ma
wic centralnego miejsca na przechowywanie wszystkich elementw aplikacji. Zalet takiego
rozwizania jest jego moduowo i moliwo podzielenia wikszej aplikacji na mniejsze logiczne
elementy oraz na dodawanie lub usuwanie nowych paczek bez koniecznoci naruszania struktury
ju istniejcych.

Zakadajc, e struktura naszego projektu jest zgodna ze struktur tworzon przez instalacj
Symfony Standard Edition lokalizacja paczek wyglda nastpujco:

Utworzenie nowej paczki jest moliwe do wykonania rcznie, ale Symfony dostarcza
narzdzie do automatycznego stworzenia odpowiedniej struktury folderw i aktualizacji wpisw w
pliku app/AppKernel.php, w ktrym znajduj si instrukcje importujce paczki:

Listing 3.1 Kod klasy app/AppKernel.php


<?php

use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\Config\Loader\LoaderInterface;

class AppKernel extends Kernel


{
public function registerBundles()
{
$bundles = array(
new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
new Symfony\Bundle\SecurityBundle\SecurityBundle(),
new Symfony\Bundle\TwigBundle\TwigBundle(),
new Symfony\Bundle\MonologBundle\MonologBundle(),
new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
new Symfony\Bundle\AsseticBundle\AsseticBundle(),
new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
new AppBundle\AppBundle(),
);

if (in_array($this->getEnvironment(), array('dev', 'test'))) {


$bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
$bundles[] = new Acme\DemoBundle\AcmeDemoBundle();
$bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
$bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
$bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
}

return $bundles;
}

public function registerContainerConfiguration(LoaderInterface $loader)


{
$loader->load($this->getRootDir().'/config/config_'.$this->getEnvironment().'.yml');
}
}

Narzdzie do generowania nowych paczek powinno by domylnie doczone do dystrybucji


Standard Edition, ale aby si upewni sprawdzamy czy na powyszym listingu znajduje si linia

$bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();

Polecenie
php app/console generate:bundle

powoduje uruchomienie narzdzia. Proces podzielony jest na kilka etapw. Pierwszy krok to
nadanie przestrzeni nazw dla nowej paczki. W tym przypadku rwnie musimy trzyma si
konwencji najpierw ustalamy nadrzdn przestrze nazw dla paczki (moe bdzie ich wicej w
przyszoci), ktra moe by nawizaniem do nazwy firmy, moduu np. Blog. Nastpnie dodajemy
kolejne czony przestrzeni, jeeli wymagane jest zagniedenie. Kolejne czony oddzielamy
znakiem / oraz do ostatniego czonu musimy doda przyrostek Bundle.

Nazwa naszego pakietu bdzie wygldaa tak:


Bundle namespace: Blog/DemoBundle

Kolejny krok to nadanie przyjaznej nazwy dla naszej paczki. Po co ? W kodzie czsto
odnosimy si do nazwy paczki wic dobr praktyk jest nadanie nazwy, ktra bdzie nawizywaa
do nazwy przestrzeni utworzonej w kroku 1. Generator paczki podpowiada nam nazw na
podstawie wartoci z kroku pierwszego i w tym przypadku proponuje nazw BlogDemoBundle.
Domylne wartoci dla kolejnych polece ujte s w nawiasach [ ] a ich zatwierdzenie odbywa
si po wciniciu klawisza Enter. Aby ujednolici nazewnictwo pierwszej paczki akceptujemy
domyln warto.

Krok 3 to wskazanie lokalizacji paczki w ramach aplikacji. Zgodnie z instrukcj w wierszu


polece paczka moe by utworzona w dowolnym miejscu, ale bdziemy si trzyma domyslnej
lokalizacji, w ktrej znajduj si ju przykadowe paczki wic akceptujemy warto domyln
/symfapp/src .

Kolejny krok to wybranie formatu przechowywania wygenerowanej konfiguracji. Do wyboru


mamy xml, yml, php lub adnotacje. W tym kroku musimy wskaza warto rcznie. W naszym
przypadku wybieramy yml.

Dalsze kroki uzalenione s od dokonanego przez nas wyboru. Narzdzie proponuje nam
wygenerowanie przykadowych skrawkw (ang. snippet) kodu. Domylna odpowied to no, ale
dla celw edukacyjnych podajemy odpowied yes i przeanalizujemy wygenerowan struktur.
Pozosta jeszcze ostatni krok w generatorze, ktry polega na potwierdzeniu caego procesu oraz
potwierdzeniu chci automatycznej aktualizacji naszego jdra aplikacji i routingu. Odpowiadamy
twierdzco na oba pytania. Jeeli nie pojawiy si komunikaty o bdach w procesie generowania
paczki nasza struktura folderu src powinna wyglda nastpujco:
3.2. Controller w Symfony PHP Framework.

Kontroler jest elementem modelu MVC (Model View Controller), ktry jest odpowiedzialny za
przetwarzanie da (ang. request) klientw (najczciej dania GET i POST wysyane poprzez
przegldark internetow) oraz generowanie odpowiedzi (ang. response). Odpowiedzi serwera
(na ktrym kontroler jest uruchamiany) jest najczciej HTML, ale moe to by plik graficzny,
tekst w dowolnym formacie (np. json, xml).

Oto listing z wygenerowanym w poprzednim punkcie domylnym kontrolerem.

Listing 3.2 Kod klasy Blog/DemoBundle/Controller/DefaultController.php


<?php

namespace Blog\DemoBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class DefaultController extends Controller


{
public function indexAction($name)
{
return $this->render('BlogDemoBundle:Default:index.html.twig', array('name' => $name));
}
}

Poczynajc od pocztku pliku okrelamy przestrze nazw, w ktrej klasa zostanie umieszczona,
zgodnie z przynalenoci do wczeniej utworzonego pakietu. Instrukcja use <cieka_do_klasy>
powoduje wskazanie, ktrej przestrzeni nazw chcemy uy w tym pliku/klasie.

Dalej znajduje si deklaracja i ciao klasy DefaultController ktra rozszerza (ang. extends) klas
Symfony\Bundle\FrameworkBundle\Controller\Controller.php. Ten kontroler
posiada tylko jedn funkcj o nazwie indexAction przyjmujc jeden argument o nazwie
$name. Funcja zwraca wynik dziaania DefaultController->render(), ktra jako
argumenty przyjmuje nazw pliku widoku oraz tablic zmiennych, ktra z widokiem bdzie
zcalona.

You might also like