Symfony Documentation
    Âûïóñê 2.0

    Fabien Potencier

    15 January 2012

    Îãëàâëåíèå
    I

    Êðàòêèé Îáçîð

    1

    1 Êðàòêèé òóð

    5

    II Ðóêîâîäñòâà

    7

    2 Êíèãà
    2.1
    2.2
    2.3
    2.4
    2.5
    2.6
    2.7
    2.8
    2.9
    2.10
    2.11
    2.12
    2.13
    2.14
    2.15
    2.16
    2.17

    Symfony2 è îñíîâû HTTP . . . . . . .
    Symfony2 ïðîòèâ ÷èñòîãî PHP . . . .
    Óñòàíîâêà è íàñòðîéêà Symfony2 . . .
    Ñîçäàíèå ñòðàíèö â Symfony2 . . . . .
    Êîíòðîëëåð . . . . . . . . . . . . . . .
    Ìàðøðóòèçàöèÿ . . . . . . . . . . . . .
    Ñîçäàíèå è èñïîëüçîâàíèå Øàáëîíîâ .
    Áàçû äàííûõ è Doctrine (Ìîäåëü) . .
    Òåñòèðîâàíèå . . . . . . . . . . . . . .
    Âàëèäàöèÿ . . . . . . . . . . . . . . . .
    Ôîðìû . . . . . . . . . . . . . . . . . .
    Áåçîïàñíîñòü . . . . . . . . . . . . . . .
    HTTP Êýøèðîâàíèå . . . . . . . . . .
    Ïåðåâîäû . . . . . . . . . . . . . . . . .
    Êîíòåéíåð ñëóæá . . . . . . . . . . . .
    Ñîñòàâíûå ÷àñòè . . . . . . . . . . . .
    Ñòàáèëüíûé API Symfony2 . . . . . . .

    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .

    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .

    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .

    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .

    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .

    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .

    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .

    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .

    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .

    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .

    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .

    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .

    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .

    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .

    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .

    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .

    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .

    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .

    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .

    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .

    11

    11
    22
    37
    42
    61
    75
    98
    121
    148
    162
    179
    210
    247
    267
    283
    304
    326

    i

    III

    Ðåöåïòû

    3 Cookbook
    3.1
    3.2
    3.3
    3.4
    3.5
    3.6
    3.7
    3.8
    3.9
    3.10
    3.11
    3.12
    3.13
    3.14
    3.15

    IV

    Êàê ñîçäàòü è ðàçìåñòèòü Ïðîåêò íà Symfony2 â git-ðåïîçèòîðèè . . .
    Êàê ñîçäàòü ñîáñòâåííûå ñòðàíèöû îøèáîê . . . . . . . . . . . . . . . .
    Êàê îïðåäåëÿòü Êîíòðîëëåðû â êà÷åñòâå ñåðâèñîâ . . . . . . . . . . . .
    Êàê çàñòàâèòü ìàðøðóòèçàòîð âñåãäà èñïîëüçîâàòü HTTPS èëè HTTP
    Êàê îòïðàâëÿòü ýëåêòðîííóþ ïî÷òó . . . . . . . . . . . . . . . . . . . .
    Êàê èñïîëüçîâàòü Gmail äëÿ îòïðàâêè ýëåêòðîííûõ ïèñåì . . . . . . .
    Êàê ñìîäåëèðîâàòü HTTP àóòåíòèôèêàöèþ â Ôóíêöèîíàëüíîì òåñòå .
    Êàê òåñòèðîâàòü âçàèìîäåéñòâèå ñ íåñêîëüêèìè êëèåíòàìè . . . . . . .
    Êàê èñïîëüçîâàòü ïðîôèëèðîâùèê â Ôóíêöèîíàëüíîì òåñòå . . . . . .
    Êàê èñïîëüçîâàòü Varnish äëÿ óñêîðåíèÿ ðàáîòû ñàéòà . . . . . . . . .
    Âíåäðåíèå ïåðåìåííûõ âî âñå øàáëîíû (ò.í. Ãëîáàëüíûå ïåðåìåííûå)
    Êàê èñïîëüçîâàòü PHP øàáëîíû âìåñðî Twig . . . . . . . . . . . . . . .
    Êàê èñïîëüçîâàòü Monolog äëÿ æóðíàëèðîâàíèÿ . . . . . . . . . . . . .
    Êàê àâòîìàòè÷åñêè çàãðóæàòü êëàññû . . . . . . . . . . . . . . . . . . .
    Êàê èñêàòü ôàéëû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    Ñïðàâî÷íûå äîêóìåíòû

    329
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .

    331

    331
    334
    336
    337
    338
    341
    342
    342
    343
    345
    346
    347
    352
    356
    359

    367

    4 Reference Documents

    371

    V

    387

    4.1
    4.2
    4.3

    Ñïðàâî÷íèê òèïîâ ïîëåé äëÿ ôîðì . . . . . . . . . . . . . . . . . . . . . . 371
    Ñïðàâî÷íèê ôóíêöèé Twig äëÿ ðàáîòû ñ ôîðìàìè . . . . . . . . . . . . . 375
    Òàãè Dependency Injection . . . . . . . . . . . . . . . . . . . . . . . . . . . 376

    Ïàêåòû

    5 Symfony SE Bundles

    391

    VI

    393

    Ó÷àñòèå â ïðîåêòå

    6 Ñîäåéñòâèå

    397

    Àëôàâèòíûé óêàçàòåëü

    405

    6.1
    6.2
    6.3

    ii

    Ñîäåéñòâèå â êîäå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
    Ñîäåéñòâèå â äîêóìåíòàöèè . . . . . . . . . . . . . . . . . . . . . . . . . . 400
    Ñîäåéñòâèå â êîäå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403

    ×àñòü I
    Êðàòêèé Îáçîð

    1

    Symfony Documentation, Âûïóñê 2.0

    Áûñòðûé ñòàðò ñ Symfony2

    Êðàòêèé Îáçîð :

    3

    Symfony Documentation, Âûïóñê 2.0

    4

    Ãëàâà

    1

    Êðàòêèé òóð
    Áûñòðûé ñòàðò ñ êðàòêèì òóðîì ïî Symfony2:
    ˆ quick_tour/the_big_picture >
    ˆ quick_tour/the_view >
    ˆ quick_tour/the_controller >
    ˆ quick_tour/the_architecture

    5

    Symfony Documentation, Âûïóñê 2.0

    6

    Ãëàâà 1.

    Êðàòêèé òóð

    ×àñòü II
    Ðóêîâîäñòâà

    7

    Symfony Documentation, Âûïóñê 2.0

    Ïîãðóçèòåñü â ìèð Symfony2 ñ ïîìîùüþ àêòóàëüíûõ ðóêîâîäñòâ:

    9

    Symfony Documentation, Âûïóñê 2.0

    10

    Ãëàâà

    2

    Êíèãà
    2.1 Symfony2 è îñíîâû HTTP
    Ïîçäðàâëÿåì! Íà÷àâ èçó÷åíèå Symfony2, âû âñòàëè íà ïðàâèëüíûé ïóòü, ÷òîáû ñòàòü
    áîëåå ïðîäóêòèâíûì, âñåñòîðîííå ðàçâèòûì è ïîïóëÿðíûì âåá-ðàçðàáîò÷èêîì (õîòÿ
    ïîñëåäíåå - íà âàøå óñìîòðåíèå). Symfony2 ñîçäàí, ÷òîáû ïðåäîñòàâëÿòü áàçîâûå, íèçêîóðîâíåâûå èíñòðóìåíòû, ïîçâîëÿþùèå âàì ðàçðàáàòûâàòü áûñòðåå, ñîçäàâàòü áîëåå
    íàä¼æíûå ïðèëîæåíèÿ, íî ïðè ýòîì áûòü â ñòðîíå îò âàøåãî ñîáñòâåííîãî ïóòè. Symfony
    ïîñòðîåí íà ëó÷øèõ èäåÿõ, çàèìñòâîâàííûõ èç ðàçëè÷íûõ òåõíîëîãèé: èíñòðóìåíòû è
    êîíöåïöèè, êîòîðûå âû ãîòîâèòåñü èçó÷èòü - ïðåäñòàâëåíû óñèëèÿìè òûñÿ÷ è òûñÿ÷
    ëþäåé íà ïðîòÿæåíèè ìíîãèõ ëåò. Äðóãèìè ñëîâàìè, âû íå òîëüêî èçó÷àåòå Symfony,
    âû èçó÷àåòå îñíîâû web, ëó÷øèå ïðàêòèêè ðàçðàáîòêè, à òàêæå ñïîñîáû èñïîëüçîâàíèÿ ìíîãèõ çàìå÷àòåëüíûõ PHP-áèáëèîòåê â ñîñòàâå Symfony2 èëè íå çàâèñèìî îò íåãî.
    Èòàê, ïðèãîòîâüòåñü.
    Ñëåäóÿ ôèëîñîôèè Symfony2, ýòà ãëàâà íà÷èíàåòñÿ ñ îáúÿñíåíèÿ îñíîâíîé êîíöåïöèè,
    òèïè÷íîé äëÿ web-ðàçðàáîòêè: HTTP. Íå çàâèñèìî îò âàøåãî îïûòà èëè ëþáèìîãî
    ÿçûêà ïðîãðàììèðîâàíèÿ, ýòà ãëàâà îáÿçàòåëüíà ê ïðî÷òåíèþ âñåì.
    2.1.1 HTTP ýòî Ïðîñòî

    HTTP (Hypertext Transfer Protocol èëè ïðîñòî Ïðîòîêîë Ïåðåäà÷è Ãèïåðòåêñòà) - ýòî
    òåêñòîâûé ÿçûê, ïîçâîëÿþùèé äâóì êîìïüþòåðàì îáìåíèâàòüñÿ ñîîáùåíèÿìè äðóã ñ
    äðóãîì. Âîò è âñ¼! Íàïðèìåð, êîãäà ìû õîòèì ïîñìîòðåòü íîâåíüêèé êîìèêñ xkcd, èìååò
    ìåñòî (ïðèìåðíî) òàêîé äèàëîã:

    11

    Symfony Documentation, Âûïóñê 2.0

    È ïîêà èñïîëüçóåòñÿ ðåàëüíûé ÿçûê, õîòÿ îí è íåñêîëüêî áîëåå ôîðìàëüíûé, îí îñòà¼òñÿ ïðåäåëüíî ïðîñòûì. HTTP - ýòî òåðìèí, èñïîëüçóåìûé äëÿ îïèñàíèÿ ýòîãî ïðîñòîãî
    òåêñòîâîãî ÿçûêà. È íå âàæíî, êàê èìåííî âû ðàçðàáàòûâàåòå â web, öåëüþ âàøåãî ñåðâåðà âñåãäà ÿâëÿåòñÿ ïîíÿòü ïðîñòîé òåêñòîâûé çàïðîñ è âåðíóòü ïðîñòîé òåêñòîâûé
    îòâåò.
    Symfony2 âîçâûøàåòñÿ íàä ýòîé ðåàëüíîñòüþ. ×òî áû âû íè äåëàëè, HTTP - ýòî òî, ÷òî
    âû èñïîëüçóåòå åæåäíåâíî. Ñ ïîìîùüþ Symfony2 âû óçíàåòå, êàê óïðàâëÿòü èì.
    Øàã 1: Êëèåíò îòïðàâëÿåò çàïðîñ

    Ëþáîé äèàëîã â ñåòè íà÷èíàåòñÿ ñ çàïðîñà. Çàïðîñ - ýòî òåêñòîâîå ñîîáùåíèå, ñîçäàâàåìîå êëèåíòîì (íàïðèìåð áðàóçåðîì èëè iPhone ïðèëîæåíèåì è ò.ä.) â îñîáîì ôîðìàòå,
    òàêæå èçâåñòíîì êàê HTTP. Êëèåíò îòïðàâëÿåò ýòîò çàïðîñ ñåðâåðó, è îæèäàåò îòâåò.
    Âçãëÿíèòå íà ïåðâóþ ÷àñòü âçàèìîäåéñòâèÿ (çàïðîñ) ìåæäó áðàóçåðîì è âåá-ñåðâåðîì
    xkcd:

    Íà ÿçûêå HTTP ýòîò çàïðîñ áóäåò âûãëÿäåòü ïðèìåðíî òàê:
    12

    Ãëàâà 2.

    Êíèãà

    Symfony Documentation, Âûïóñê 2.0

    GET / HTTP/1.1
    Host: xkcd.com
    Accept: text/html
    User-Agent: Mozilla/5.0 (Macintosh)

    Ýòî ïðîñòîå ñîîáùåíèå ñîäåðæèò âñþ íåîáõîäèìóþ èíôîðìàöèþ î òîì, êàêîé èìåííî
    ðåñóðñ çàïðàøèâàåò êëèåíò. Ïåðâàÿ ñòðîêà HTTP çàïðîñà íàèáîëåå âàæíà - îíà ñîäåðæèò 2 âåùè: çàïðîøåííûé URI è HTTP-ìåòîä.
    URI (íàïðèìåð /, /contact, è ò.ä.) - ýòî óíèêàëüíûé àäðåñ èëè ìåñòî, êîòîðîå îïðåäåëÿåò çàïðîøåííûé êëèåíòîì ðåñóðñ. HTTP-ìåòîä (íàïðèìåð GET) îïðåäåëÿåò, ÷òî èìåííî
    âû õîòèòå ñäåëàòü ñ çàïðîøåííûì ðåñóðñîì. HTTP ìåòîäû ýòî ãëàãîëû â çàïðîñå è
    îíè îïðåäåëÿþò íåñêîëüêî òèïè÷íûõ ïóòåé, êîòîðûìè âû ìîæåòå âçàèìîäåéñòâîâàòü ñ
    çàïðîøåííûì ðåñóðñîì:
    GET
    POST
    PUT
    DELETE

    Ïîëó÷èòü ðåñóðñ ñ ñåðâåðà
    Ñîçäàòü ðåñóðñ íà ñåðâåðå
    Îáíîâèòü ðåñóðñ íà ñåðâåðå
    Óäàëèòü ðåñóðñ ñ ñåðâåðà

    Çàïîìíèâ ýòè òèïû HTTP-ìåòîäîâ, âû ìîæåòå ïðåäñòàâèòü ñåáå, êàê áóäåò âûãëÿäåòü
    HTTP-çàïðîñ íà óäàëåíèå çàïèñè â áëîãå:
    DELETE /blog/15 HTTP/1.1

    Ïðèìå÷àíèå: Íà ñàìîì äåëå âñåãî ñóùåñòâóåò äåâÿòü HTTP-ìåòîäîâ, îïðåäåë¼ííûõ

    â ñïåöèôèêàöèè ïðîòîêîëà HTTP, íî ìíîãèå èç íèõ î÷åíü ìàëî ðàñïðîñòðàíåíû èëè
    æå îãðàíè÷åííî ïîääåðæèâàþòñÿ. Ê ïðèìåðó, ìíîãèå ñîâðåìåííûå áðàóçåðû íå ïîääåðæèâàþò ìåòîäû PUT è DELETE.
     äîïîëíåíèå ê ïåðâîé ñòðîêå, HTTP-çàïðîñ âñåãäà ñîäåðæèò íåñêîëüêî èíôîðìàöèîííûõ ñòðîê, èìåíóåìûõ çàãîëîâêàìè (headers). Çàãîëîâêè ìîãóò ïðåäîñòàâëÿòü ðàçëè÷íóþ èíôîðìàöèþ, òàêóþ êàê çàïðîøåííûé Host, ôîðìàòû îòâåòà, êîòîðûå ïîääåðæèâàåò êëèåíò (Accept) è ïðèëîæåíèå, èñïîëüçóåìîå êëèåíòîì äëÿ âûïîëíåíèÿ çàïðîñà
    (User-Agent). Ñóùåñòâóåò òàêæå ìíîãî äðóãèõ çàãîëîâêîâ, ïåðå÷åíü êîòîðûõ âû ìîæåòå íàéòè â Âèêèïåäèè íà ñòðàíèöå List of HTTP header elds.
    Øàã 2: Ñåðâåð âîçâðàùàåò îòâåò

    Ñ òîãî ìîìåíòà êàê ñåðâåð ïîëó÷èë çàïðîñ, îí òî÷íî çíàåò, êàêîé ðåñóðñ íóæåí êëèåíòó
    (îñíîâûâàÿñü íà URI) è ÷òî êëèåíò õî÷åò ñ ýòèì ðåñóðñîì ñäåëàòü - íà îñíîâàíèè HTTPìåòîäà. Íàïðèìåð, â ñëó÷àå GET-çàïðîñà, ñåðâåð ïîäãîòîâèò çàïðîøåííûé ðåñóðñ è
    âîçâðàòèò åãî â âèäå HTTP-îòâåòà. Ðàññìîòðèì îòâåò îò web ñåðâåðà xkcd:

    2.1.

    Symfony2 è îñíîâû HTTP

    13

    Symfony Documentation, Âûïóñê 2.0

    Ïåðåâåä¼ííûé â ôîðìàò HTTP, îòâåò, îòïðàâëåííûé îáðàòíî â áðàóçåð, áóäåò âûãëÿäåòü ïðèìåðíî òàê:
    HTTP/1.1 200 OK
    Date: Sat, 02 Apr 2011 21:05:05 GMT
    Server: lighttpd/1.4.19
    Content-Type: text/html




    HTTP-îòâåò ñîäåðæèò çàïðîøåííûé ðåñóðñ (â äàííîì ñëó÷àå ýòî HTML-êîä ñòðàíèöû), à òàêæå äîïîëíèòåëüíûå äàííûå î ñàìîì îòâåòå. Ïåðâàÿ ñòðîêà îñîáåííî âàæíà îíà ñîäåðæèò HTTP ñòàòóñ-êîä (â äàííîì ñëó÷àå 200). Ñòàòóñ-êîä ñîîáùàåò î ðåçóëüòàòå âûïîëíåíèÿ çàïðîñà, íàïðàâëÿåìîì êëèåíòó. Áûë ëè çàïðîñ óñïåøåí? Áûëà ëè â
    õîäå âûïîëíåíèÿ çàïðîñà îøèáêà? Îäíè ñòàòóñ-êîäû îáîçíà÷àþò óñïåøíûå çàïðîñû,
    äðóãèå - îøèáêè, òðåòüè ñîîáùàþò, ÷òî êëèåíò äîëæåí âûïîëíèòü ÷òî-ëèáî (íàïðèìåð
    ïåðåíàïðàâëåíèå íà äðóãóþ ñòðàíèöó). Ïîëíûé ñïèñîê âû ìîæåòå íàéòè ñòðàíèöå List
    of HTTP status codes â Âèêèïåäèè.
    Ïîäîáíî çàïðîñó, HTTP-îòâåò ñîäåðæèò äîïîëíèòåëüíóþ èíôîðìàöèþ, íàçûâàåìóþ HTTP-çàãîëîâêàìè. Íàïðèìåð, âàæíûì çàãîëîâêîì HTTP-îòâåòà ÿâëÿåòñÿ
    Content-Type. Òåëî îäíîãî è òîãî æå ðåñóðñà ìîæåò áûòü âîçâðàùåíî âî ìíîæåñòâå
    ðàçëè÷íûõ ôîðìàòîâ, âêëþ÷àÿ HTML, XML èëè JSON. Çàãîëîâîê Content-Type ñîîáùàåò êëèåíòó, êàêîé èìåííî ôîðìàò èñïîëüçóåòñÿ â äàííîì îòâåòå.
    Ñóùåñòâóåò ìíîãî ðàçëè÷íûõ çàãîëîâêîâ, íåêîòîðûå èç íèõ ïðåäîñòàâëÿþò áîëüøèå
    âîçìîæíîñòè. Íàïðèìåð, íåêîòîðûå çàãîëîâêè ìîãóò áûòü èñïîëüçîâàíû äëÿ ñîçäàíèÿ
    ñèñòåìû êýøèðîâàíèÿ.

    14

    Ãëàâà 2.

    Êíèãà

    Symfony Documentation, Âûïóñê 2.0

    Çàïðîñû, Îòâåòû è Web-ðàçðàáîòêà

    Îáìåí çàïðîñàìè-îòâåòàìè - ýòî ôóíäàìåíòàëüíûé ïðîöåññ, êîòîðûé äâèæåò âñå êîììóíèêàöèè âî âñåìèðíîé ñåòè. È íàñêîëüêî âàæåí ýòîò ïðîöåññ, íàñòîëüêî îí ïðîñò.
    Íàèáîëåå âàæíûì ÿâëÿåòñÿ ñëåäóþùèé ôàêò: âíå çàâèñèìîñòè îò òîãî, êàêîé ÿçûêà
    ïðîãðàììèðîâàíèÿ âû èñïîëüçóåòå, êàêîå ïðèëîæåíèå ñîçäà¼òå (web, ìîáèëüíîå, JSON
    API) è äàæå êàêîé ôèëîñîôèè ñëåäóåòå â ðàçðàáîòêå ÏÎ, êîíå÷íîé öåëüþ ïðèëîæåíèÿ
    âñåãäà áóäåò ïðè¼ì è ðàçáîð çàïðîñà è ñîçäàíèå ñîîòâåòñòâóþùåãî îòâåòà.
    Symfony ñïðîåêòèðîâàí èñõîäÿ èç ýòèõ ðåàëèé.

    Ñîâåò: Äëÿ òîãî ÷òîáû óçíàòü áîëüøå ïðî ñïåöèôèêàöèþ HTTP, ïðî÷èòàéòå îðèãèíàë HTTP 1.1 RFC èëè æå HTTP Bis, êîòîðûé ÿâëÿåòñÿ èíèöèàòèâîé ïî ðàçúÿñíåíèþ
    îðèãèíàëüíîé ñïåöèôèêàöèè. Çàìå÷àòåëüíûé èíñòðóìåíò äëÿ ïðîâåðêè çàãîëîâêîâ çàïðîñà è îòâåòà ïðè ñ¼ðôèíãå - ýòî ðàñøèðåíèå äëÿ Firefox Live HTTP Headers.

    2.1.2 Çàïðîñû è îòâåòû â PHP

    Êàê æå âû îáðàáàòûâàåòå çàïðîñ è ñîçäàåòå îòâåò ïðè èñïîëüçîâàíèè PHP? Íà
    ñàìîì äåëå PHP íåìíîãî àáñòðàãèðóåò âàñ îò ïðîöåññà:
    $uri = $_SERVER['REQUEST_URI'];
    $foo = $_GET['foo'];
    header('Content-type: text/html');
    echo 'The URI requested is: '.$uri;
    echo 'The value of the "foo" parameter is: '.$foo;

    Êàê áû ñòðàííî ýòî íè çâó÷àëî, íî ýòî êðîõîòíîå ïðèëîæåíèå ïîëó÷àåò èíôîðìàöèþ èç
    HTTP-çàïðîñà è èñïîëüçóåò å¼ äëÿ ñîçäàíèÿ HTTP-îòâåòà. Âìåñòî òîãî, ÷òîáû ïàðñèòü
    íåîáðàáîòàííûé HTTP-çàïðîñ, PHP ïîäãîòàâëèâàåò ñóïåðãëîáàëüíûå ïåðåìåííûå, òàêèå êàê $_SERVER è $_GET, êîòîðûå ñîäåðæàò âñþ èíôîðìàöèþ î çàïðîñå. Àíàëîãè÷íî,
    âìåñòî òîãî, ÷òîáû âîçâðàùàòü òåêñò îòâåòà, ôîðìàòèðîâàííûé ïî ïðàâèëàì HTTP,
    âû ìîæåòå èñïîëüçîâàòü ôóíêöèè header() äëÿ ñîçäàíèÿ çàãîëîâêîâ îòâåòîâ è ïðîñòî âûâåñòè íà ïå÷àòü îñíîâíîé êîíòåíò, êîòîðûé ñòàíåò êîíòåíòíûì áëîêîì îòâåòà. Â
    çàêëþ÷åíèè PHP ñîçäàñò ïðàâèëüíûé HTTP-îòâåò è âåðíåò åãî êëèåíòó:
    HTTP/1.1 200 OK
    Date: Sat, 03 Apr 2011 02:14:33 GMT
    Server: Apache/2.2.17 (Unix)
    Content-Type: text/html

    2.1.

    Symfony2 è îñíîâû HTTP

    15

    Symfony Documentation, Âûïóñê 2.0

    The URI requested is: /testing?foo=symfony
    The value of the "foo" parameter is: symfony

    2.1.3 Çàïðîñû è îòâåòû â Symfony

    Symfony ïðåäîñòàâëÿåò àëüòåðíàòèâó ïðÿìîëèíåéíîìó ïîäõîäó èç PHP ïîñðåäñòâîì
    äâóõ êëàññîâ, êîòîðûå ïîçâîëÿþò âçàèìîäåéñòâîâàòü ñ HTTP-çàïðîñîì è îòâåòîì ñàìûì ïðîñòåéøèì ñïîñîáîì. Êëàññ Symfony\Component\HttpFoundation\Request - ýòî
    ïðîñòîå îáúåêòíî-îðèåíòèðîâàííîå ïðåäñòàâëåíèå ñîîáùåíèÿ HTTP-çàïðîñà. Ñ åãî ïîìîùüþ âû èìååòå âñå äàííûå èç çàïðîñà íà êîí÷èêàõ ïàëüöåâ:
    use Symfony\Component\HttpFoundation\Request;
    $request = Request::createFromGlobals();
    // çàïðîøåííûé URI (íà ïðèìåð /about) áåç query parameters
    $request->getPathInfo();
    // ïîëó÷àåì GET è POST ïåðåìåííûå ñîîòâåòñòâåííî
    $request->query->get('foo');
    $request->request->get('bar');
    // ïîëó÷àåì ýêçåìïëÿð UploadedFile îïðåäåëÿåìûé èäåíòèôèêàòîðîì foo
    $request->files->get('foo');
    $request->getMethod();
    $request->getLanguages();

    // GET, POST, PUT, DELETE, HEAD
    // ìàññèâ ÿçûêîâ, ïðèíèìàåìûõ êëèåíòîì

     êà÷åñòâå áîíóñà, êëàññ Request âûïîëíÿåò áîëüøîé îáú¼ì ðàáîòû â ôîíîâîì ðåæèìå, òàê ÷òî âàì íå ïðèäåòñÿ çàáîòèòüñÿ î ìíîãèõ âåùàõ. Íàïðèìåð, ìåòîä isSecure()
    ïðîâåðÿåò òðè ðàçëè÷íûõ çíà÷åíèÿ â PHP, êîòîðûå óêàçûâàþò, ÷òî ïîëüçîâàòåëü ïîäêëþ÷àåòñÿ ïî çàùèùåííîìó ïðîòîêîëó (https).
    Symfony òàêæå ïðåäîñòàâëÿåò êëàññ Response: ïðîñòîå ÐHP-ïðåäñòàâëåíèå HTTPîòâåòà. Ýòî ïîçâîëÿåò âàøåìó ïðèëîæåíèþ èñïîëüçîâàòü îáúåêòíî-îðèåíòèðîâàííûé
    èíòåðôåéñ äëÿ êîíñòðóèðîâàíèÿ îòâåòà, êîòîðûé íóæíî âåðíóòü êëèåíòó:
    use Symfony\Component\HttpFoundation\Response;
    $response = new Response();
    $response->setContent('

    Hello world!

    ');
    $response->setStatusCode(200);
    16

    Ãëàâà 2.

    Êíèãà

    Symfony Documentation, Âûïóñê 2.0

    $response->headers->set('Content-Type', 'text/html');
    // prints the HTTP headers followed by the content
    $response->send();

    Åñëè áû Symfony íè÷åãî âàì íå ïðåäëàãàëà, âû âñåãäà äîëæíû áûëè áû èìåòü íàáîð
    èíñòðóìåíòîâ äëÿ òîãî ÷òîáû ìîæíî áûëî ïðîñòî è áûñòðî ïîëó÷èòü äîñòóï ê èíôîðìàöèè èç çàïðîñà è îáúåêòíî-îðèåíòèðîâàííûé èíòåðôåéñ äëÿ ñîçäàíèÿ îòâåòà. Äàæå
    åñëè âû îñâîèòå áîëåå ìîùíûå âîçìîæíîñòè â Symfony, âñåãäà äåðæèòå â ãîëîâå, ÷òî
    öåëü âàøåãî ïðèëîæåíèÿ âñåãäà çàêëþ÷àåòñÿ â òîì, ÷òîáû èíòåðïðåòèðîâàòü çàïðîñ
    è ñîçäàòü ñîîòâåòñòâóþùèé îòâåò, îñíîâûâàÿñü íà ëîãèêå âàøåãî ïðèëîæåíèÿ

    Ñîâåò: Êëàññû Request è Response ÿâëÿþòñÿ ÷àñòüþ ñàìîñòîÿòåëüíîãî êîìïîíåíòà
    HttpFoundation. Ýòîò êîìïîíåíò ìîæåò áûòü èñïîëüçîâàí íåçàâèñèìî îò Symfony è îí
    òàêæå ïðåäîñòàâëÿåò êëàññû äëÿ ðàáîòû ñ ñåññèÿìè è çàãðóçêè ôàéëîâ.

    2.1.4 Ïóòåøåñòâèå îò Çàïðîñà äî Îòâåòà

    Êàê è HTTP-ïðîòîêîë, îáúåêòû Request è Response äîñòàòî÷íî ïðîñòû. Ñàìàÿ ñëîæíàÿ ÷àñòü ñîçäàíèÿ ïðèëîæåíèÿ çàêëþ÷àåòñÿ â íàïèñàíèè ïðîöåññîâ, êîòîðûå ïðîèñõîäÿò ìåæäó ïîëó÷åíèåì çàïðîñà è îòïðàâêîé îòâåòà. Äðóãèìè ñëîâàìè, ðåàëüíàÿ ðàáîòà
    çàêëþ÷àåòñÿ â íàïèñàíèè êîäà, êîòîðûé èíòåðïðåòèðó