http://traintosymfony.com1Emanuele GaspariTRAINTO SYMFONYVerona, 13•14 Aprile 2013the frameworkshophttp://traintosymfony.c...
http://traintosymfony.com2Emanuele Gaspariabout mecreatore di SymfonyBricksEmanuele Gaspariultimo sito pubblicato (copiain...
http://traintosymfony.com3Emanuele Gaspariprima parte:familiarità con i concetti di SymfonySymfony: teoria e codiceRouting...
http://traintosymfony.com4Emanuele GaspariintroSymfony2: what?usare un frameworkSymfony internalsnamespacesRequest e Respo...
http://traintosymfony.com5Emanuele Gaspariun po di storiaS 1.0 → gennaio 2007S 1.2 → novembre 2008S 1.4 → novembre 2009S 2...
http://traintosymfony.com6Emanuele Gasparidef.Symfony2 è un insieme di componenti PHP riutilizzabili e indipendentiche ris...
http://traintosymfony.com7Emanuele Gasparigli attrezziSymfony è una cassetta degli attrezzi
http://traintosymfony.com8Emanuele GaspariSymfony fornisce degli (ottimi) strumentiper gestire (molti) problemi ricorrenti...
http://traintosymfony.com9Emanuele Gasparia noi resta solo il divertimentoyeah!
http://traintosymfony.com10Emanuele GaspariintroSymfony2: what?usare un frameworkSymfony internalsnamespacesRequest e Resp...
http://traintosymfony.com11Emanuele Gaspariframework, #Symfonyperché un framework●codice coperto da test(security audit 20...
http://traintosymfony.com12Emanuele Gasparinon occuparsi di task ripetitivioffrire strumenti opzionaliper risolvereproblem...
http://traintosymfony.com13Emanuele GaspariintroSymfony2: what?usare un frameworkSymfony internalsnamespacesRequest e Resp...
http://traintosymfony.com14Emanuele Gaspariin Symfony ogni cosa è un bundlefunzionalità del corecodice di terze particodic...
http://traintosymfony.com15Emanuele Gaspariun bundle è una cartellache contiene codice PHPpuò ospitare qualsiasi cosa●cont...
http://traintosymfony.com16Emanuele Gaspariil core di Symfony e tutti i bundles aggiuntisuccessivamente vengono gestiti at...
http://traintosymfony.com17Emanuele Gasparicorecomponenti librerie esterne bundlesConfigConsoleFormHttpFoundationHttpKerne...
http://traintosymfony.com18Emanuele Gaspariconfigurazionecomponenti di Symfonylibrerie di terze partiorganizzato in bundle...
http://traintosymfony.com19Emanuele GaspariintroSymfony2: what?usare un frameworkSymfony internalsnamespacesRequest e Resp...
http://traintosymfony.com20Emanuele GaspariPHP 5.3S 2.0 >= 5.3.2S 2.1 >= 5.3.3S 2.2 >= 5.3.3PHP 5.3.0 è stato rilasciato n...
http://traintosymfony.com21Emanuele Gaspari# /var/www/vhosts/traintosymfony/src/Foo/BarBundle/Controller/DefaultController...
http://traintosymfony.com22Emanuele GaspariintroSymfony2: what?usare un frameworkSymfony internalsnamespacesRequest e Resp...
http://traintosymfony.com23Emanuele Gaspariil nostro lavoroil nostro lavoro è quello di sviluppareapplicazioni webche gest...
http://traintosymfony.com24Emanuele Gaspari
http://traintosymfony.com25Emanuele GasparihelpSymfony ti aiuta esattamente a fare questo
http://traintosymfony.com26Emanuele GaspariintroSymfony2: what?usare un frameworkSymfony internalsnamespacesRequest e Resp...
http://traintosymfony.com27Emanuele Gasparifront controlleril front controller è lunico punto di accesso allapplicazione d...
http://traintosymfony.com28Emanuele GaspariintroSymfony2: what?usare un frameworkSymfony internalsnamespacesRequest e Resp...
http://traintosymfony.com29Emanuele Gaspariflusso di unapplicazione Symfony 1/3il client invia una richiesta che viene ric...
http://traintosymfony.com30Emanuele Gaspariflusso di unapplicazione Symfony 2/3attraverso il sistema di Routing, Symfony i...
http://traintosymfony.com31Emanuele Gaspariflusso di unapplicazione Symfony 3/3viene eseguita unazione, che restituisce un...
http://traintosymfony.com32Emanuele Gaspariflusso completorichiestabootstrap (del kernel)dellapplicazioneSymfonyFront Cont...
http://traintosymfony.com33Emanuele Gaspari# /var/www/vhosts/traintosymfony/web/app.php<?phpuse SymfonyComponentHttpFounda...
http://traintosymfony.com34Emanuele Gaspari
http://traintosymfony.com35Emanuele Gasparifacciamo il puntocreare una Route che associ un url ad unazione contenuta in un...
http://traintosymfony.com36Emanuele GaspariintroSymfony2: what?usare un frameworkSymfony internalsnamespacesRequest e Resp...
http://traintosymfony.com37Emanuele GaspariHTTPHTTPnon importa con quali strumenti e in che modo sviluppi per il web,lobie...
http://traintosymfony.com38Emanuele Gasparilo schema seguente rappresenta tutta la complessità di una richiesta HTTP 1.1pr...
http://traintosymfony.com39Emanuele GaspariHTTPrichiestarispostaclient SERVERThe HTTP protocol is a request/response proto...
http://traintosymfony.com40Emanuele Gaspariok, lo sapevograzie, lo sapevo già(o forse no)
http://traintosymfony.com41Emanuele Gasparibodyuna richiesta HTTPhttp://www.symfony.comhttp://www.symfony.com
http://traintosymfony.com42Emanuele GaspariobiettiviHTTP è uno standard e funziona molto beneè importante ricordarsi da do...
http://traintosymfony.com43Emanuele Gasparila filosofia“Symfony è progettato per soddisfare questa realtà.”"Se Symfony non...
http://traintosymfony.com44Emanuele Gasparifinora non ho avuto (particolari) problemi con$_GET, $_SERVER, etc..perché dovr...
http://traintosymfony.com45Emanuele Gaspariun solo esempio può essere sufficiente
http://traintosymfony.com46Emanuele Gasparistring(35) "it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4"string(35) "it-IT,it;q=0.8,en-U...
http://traintosymfony.com47Emanuele Gaspariarray(4) {[0]=> string(5) "it_IT"[1]=> string(2) "it"[2]=> string(5) "en_US"[3]...
http://traintosymfony.com48Emanuele Gasparinon re-inventare la ruotanon occuparsi di task ripetitiviABOUT: “Freddie Mercur...
http://traintosymfony.com49Emanuele GaspariintroSymfony2: what?usare un frameworkSymfony internalsnamespacesRequest e Resp...
http://traintosymfony.com50Emanuele Gasparivorrei mostrare agli utenti dei clean urls (il più possibile)posizionamento sui...
http://traintosymfony.com51Emanuele GaspariWordpress dà la possibilità di scegliere il formato dellurl di un post:wordpress
http://traintosymfony.com52Emanuele Gasparigestire gli urlCome sviluppatore vorrei un (buon) sistema per gestire url “parl...
http://traintosymfony.com53Emanuele GaspariintroSymfony2: what?usare un frameworkSymfony internalsnamespacesRequest e Resp...
http://traintosymfony.com54Emanuele Gaspari# app/config/routing.ymlprodotto_show:path: /prodotto/{codice}defaults: { _cont...
http://traintosymfony.com55Emanuele Gaspariprodotto_show:path: /prodotto/{codice}defaults: { _controller: TtsDemoBundle:Pr...
http://traintosymfony.com56Emanuele GaspariGET /prodotto/EG-124GET /prodotto/EG-27GET /prodotto/EG-74GET /prodotto/EG-124G...
http://traintosymfony.com57Emanuele GaspariintroSymfony2: what?usare un frameworkSymfony internalsnamespacesRequest e Resp...
http://traintosymfony.com58Emanuele GaspariTWIGSymfony usa TWIG come linguaggio e motore di templating pergenerare contenu...
http://traintosymfony.com59Emanuele Gaspariesempio<ul>{% for item in menu_links %}<li><a href="{{ item.href }}">{{ item.la...
http://traintosymfony.com60Emanuele GaspariintroSymfony2: what?usare un frameworkSymfony internalsnamespacesRequest e Resp...
http://traintosymfony.com61Emanuele Gasparirisposta HTMLnella terza fase del flusso request/response lazione produce una r...
http://traintosymfony.com62Emanuele Gasparirisposta HTML●gestito la richiesta che arriva allapplicazione●analizzato i para...
http://traintosymfony.com63Emanuele Gasparitemplate twigviene convertito (quasi sempre) in HTML per produrre il bodydella ...
TRAINTO SYMFONYVerona, 13•14 Aprile 2013the frameworkshophttp://traintosymfony.com@TrainToSymfonyMedia partner:©Copyright ...
Upcoming SlideShare
Loading in …5
×

Symfony (1/3) | Train to Symfony

1,647 views

Published on

Topic: Symfony
Language: italian (english version soon)
First of three presentations shown during the first edition of the Train to Symfony
Verona 13/14 April 2013

http://traintosymfony.com
http://twitter.com/TrainToSymfony

Emanuele Gaspari
https://twitter.com/inmarelibero

0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,647
On SlideShare
0
From Embeds
0
Number of Embeds
24
Actions
Shares
0
Downloads
37
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

Symfony (1/3) | Train to Symfony

  1. 1. http://traintosymfony.com1Emanuele GaspariTRAINTO SYMFONYVerona, 13•14 Aprile 2013the frameworkshophttp://traintosymfony.com@TrainToSymfonyMedia partner:Symfony (1/3)
  2. 2. http://traintosymfony.com2Emanuele Gaspariabout mecreatore di SymfonyBricksEmanuele Gaspariultimo sito pubblicato (copiaincolla): www.ilovesanmartino.it4 bundles21 controllers6 services9 entities5 repositories custom4 estensioni twig14 macros10 bundles aggiuntivi(FOSUserBundle, FOSJsRoutingBundle, KnpPaginatorBundle, CopiaincollaMetaTagsBundle, etc..)co-sviluppatore di CopiaincollaMetaTagsBundle https://github.com/copiaincolla/MetaTagsBundlehttps://symfonybricks.cominmarelibero@gmail.com @inmarelibero
  3. 3. http://traintosymfony.com3Emanuele Gaspariprima parte:familiarità con i concetti di SymfonySymfony: teoria e codiceRouting Templatingoverview
  4. 4. http://traintosymfony.com4Emanuele GaspariintroSymfony2: what?usare un frameworkSymfony internalsnamespacesRequest e ResponseFront Controllerflusso di unapplicazioneHTTPRoutingclean urlsRoutes in SymfonyTemplatingTWIGrisposta HTMLOVERVIEW
  5. 5. http://traintosymfony.com5Emanuele Gaspariun po di storiaS 1.0 → gennaio 2007S 1.2 → novembre 2008S 1.4 → novembre 2009S 2.0 → luglio 2011S 2.1 → settembre 2012S 2.2 → marzo 2013S 2.3 → maggio 2013 (LTS)Symfonyis a trademark of Fabien Potencier. All rights reserved.
  6. 6. http://traintosymfony.com6Emanuele Gasparidef.Symfony2 è un insieme di componenti PHP riutilizzabili e indipendentiche risolvono problemi frequenti di sviluppo.Symfony Standard Distributionhttp://fabien.potencier.org/article/49/what-is-symfony2, 25 Ottobre 2011 http://symfony.com/it/doc/current/book/http_fundamentals.htmlSulla base di questi componenti, Symfony2 è anche un framework completo.
  7. 7. http://traintosymfony.com7Emanuele Gasparigli attrezziSymfony è una cassetta degli attrezzi
  8. 8. http://traintosymfony.com8Emanuele GaspariSymfony fornisce degli (ottimi) strumentiper gestire (molti) problemi ricorrentipersistenza dei dati sicurezza formvalidazione templating configurazionelogging gestione degli assets routingtraduzioni serializzazione console taskscaching invio di email etc...problemi ricorrenti
  9. 9. http://traintosymfony.com9Emanuele Gasparia noi resta solo il divertimentoyeah!
  10. 10. http://traintosymfony.com10Emanuele GaspariintroSymfony2: what?usare un frameworkSymfony internalsnamespacesRequest e ResponseFront Controllerflusso di unapplicazioneHTTPRoutingclean urlsRoutes in SymfonyTemplatingTWIGrisposta HTMLOVERVIEW
  11. 11. http://traintosymfony.com11Emanuele Gaspariframework, #Symfonyperché un framework●codice coperto da test(security audit 2011, 9.500 europer testare Symfony2, Doctrine e Twig)●flessibile●sicuro●è strutturato●manutenibile, sviluppo in team●aggiornabile●concentrarsi sul “business value”●codice di qualitàperché Symfony●Stable API●Long term support(S2.3 supportata fino al 2016)●community e risorse
  12. 12. http://traintosymfony.com12Emanuele Gasparinon occuparsi di task ripetitivioffrire strumenti opzionaliper risolvereproblemi complessigoals
  13. 13. http://traintosymfony.com13Emanuele GaspariintroSymfony2: what?usare un frameworkSymfony internalsnamespacesRequest e ResponseFront Controllerflusso di unapplicazioneHTTPRoutingclean urlsRoutes in SymfonyTemplatingTWIGrisposta HTMLOVERVIEW
  14. 14. http://traintosymfony.com14Emanuele Gaspariin Symfony ogni cosa è un bundlefunzionalità del corecodice di terze particodice dellapplicazione“In Symfony2, bundles are first-class citizens that are soflexible that even core code itself is a bundle.”http://symfony.com/doc/master/cookbook/symfony1.htmleverything is a bundle
  15. 15. http://traintosymfony.com15Emanuele Gaspariun bundle è una cartellache contiene codice PHPpuò ospitare qualsiasi cosa●controllers●templates●assets javascript, css, immagini●classi varie●...ha una struttura ben definita,che alloccorrenza può esserepersonalizzata(vedi KnpRadBundle, http://rad.knplabs.com)https://github.com/inmarelibero/SymfonyBricksorganizzazione di un bundle
  16. 16. http://traintosymfony.com16Emanuele Gaspariil core di Symfony e tutti i bundles aggiuntisuccessivamente vengono gestiti attraversoComposer$ php composer.phar install$ php composer.phar install$ php composer.phar update$ php composer.phar updateil file vendor/autoload.php carica in Symfony tutte le librerie installatehttp://getcomposer.orge installati nella cartella /vendorvendor
  17. 17. http://traintosymfony.com17Emanuele Gasparicorecomponenti librerie esterne bundlesConfigConsoleFormHttpFoundationHttpKernelLocaleRoutingSecurityTemplatingTranslationValidatorYamlDoctrine ORMSwiftMailerTwigSensioFrameworkExtraBundleSensioGeneratorBundleJMSSecurityExtraBundleDoctrineFixturesBundleDoctrineMigrationsBundleDoctrineMongoDBBundleil core di Symfony (elenco ampiamente parziale)
  18. 18. http://traintosymfony.com18Emanuele Gaspariconfigurazionecomponenti di Symfonylibrerie di terze partiorganizzato in bundlesbundles dellutentedocument root dellapplicazionecontrollerstemplates, javascript, cssfront controllersstruttura di unapplicazione
  19. 19. http://traintosymfony.com19Emanuele GaspariintroSymfony2: what?usare un frameworkSymfony internalsnamespacesRequest e ResponseFront Controllerflusso di unapplicazioneHTTPRoutingclean urlsRoutes in SymfonyTemplatingTWIGrisposta HTMLOVERVIEW
  20. 20. http://traintosymfony.com20Emanuele GaspariPHP 5.3S 2.0 >= 5.3.2S 2.1 >= 5.3.3S 2.2 >= 5.3.3PHP 5.3.0 è stato rilasciato nel giugno 2009namespacesfunzioni lambda/closuresgarbage collectionSymfony2 richiede come minimola versione 5.3.2 di PHP
  21. 21. http://traintosymfony.com21Emanuele Gaspari# /var/www/vhosts/traintosymfony/src/Foo/BarBundle/Controller/DefaultController.php<?phpnamespace FooBarBundleController;use SymfonyBundleFrameworkBundleControllerController;use SymfonyComponentHttpFoundationResponse;class DefaultController extends Controller{public function indexAction(){return new Response("Hello");}}# /var/www/vhosts/traintosymfony/src/Foo/BarBundle/Controller/DefaultController.php<?phpnamespace FooBarBundleController;use SymfonyBundleFrameworkBundleControllerController;use SymfonyComponentHttpFoundationResponse;class DefaultController extends Controller{public function indexAction(){return new Response("Hello");}}PSR-0https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.mdnamespaces/var/www/vhosts/traintosymfony/src/Foonamespace Foo
  22. 22. http://traintosymfony.com22Emanuele GaspariintroSymfony2: what?usare un frameworkSymfony internalsnamespacesRequest e ResponseFront Controllerflusso di unapplicazioneHTTPRoutingclean urlsRoutes in SymfonyTemplatingTWIGrisposta HTMLOVERVIEW
  23. 23. http://traintosymfony.com23Emanuele Gaspariil nostro lavoroil nostro lavoro è quello di sviluppareapplicazioni webche gestiscanorichieste HTTPe producano unarisposta
  24. 24. http://traintosymfony.com24Emanuele Gaspari
  25. 25. http://traintosymfony.com25Emanuele GasparihelpSymfony ti aiuta esattamente a fare questo
  26. 26. http://traintosymfony.com26Emanuele GaspariintroSymfony2: what?usare un frameworkSymfony internalsnamespacesRequest e ResponseFront Controllerflusso di unapplicazioneHTTPRoutingclean urlsRoutes in SymfonyTemplatingTWIGrisposta HTMLOVERVIEW
  27. 27. http://traintosymfony.com27Emanuele Gasparifront controlleril front controller è lunico punto di accesso allapplicazione dallesternosi occupa di fare il bootstrap dellapplicazione (kernel),interrogare il controller e restituire una risposta/app.php /app_dev.php
  28. 28. http://traintosymfony.com28Emanuele GaspariintroSymfony2: what?usare un frameworkSymfony internalsnamespacesRequest e ResponseFront Controllerflusso di unapplicazioneHTTPRoutingclean urlsRoutes in SymfonyTemplatingTWIGrisposta HTMLOVERVIEW
  29. 29. http://traintosymfony.com29Emanuele Gaspariflusso di unapplicazione Symfony 1/3il client invia una richiesta che viene ricevuta dal Front Controller (app.php)il front controller crea e gestisce un oggetto di tipo Request
  30. 30. http://traintosymfony.com30Emanuele Gaspariflusso di unapplicazione Symfony 2/3attraverso il sistema di Routing, Symfony individuaun Controller e una Action da eseguire a seconda dellurl
  31. 31. http://traintosymfony.com31Emanuele Gaspariflusso di unapplicazione Symfony 3/3viene eseguita unazione, che restituisce una risposta al client (html, xml, json)le azioni restituiscono SEMPRE un oggetto di tipo Response
  32. 32. http://traintosymfony.com32Emanuele Gaspariflusso completorichiestabootstrap (del kernel)dellapplicazioneSymfonyFront Controller(app.php)Controller rispostabrowser browser
  33. 33. http://traintosymfony.com33Emanuele Gaspari# /var/www/vhosts/traintosymfony/web/app.php<?phpuse SymfonyComponentHttpFoundationRequest;$loader = require_once __DIR__./../app/bootstrap.php.cache;require_once __DIR__./../app/AppKernel.php;$kernel = new AppKernel(prod, false);$kernel->loadClassCache();$request = Request::createFromGlobals();$response = $kernel->handle($request);$response->send();$kernel->terminate($request, $response);# /var/www/vhosts/traintosymfony/web/app.php<?phpuse SymfonyComponentHttpFoundationRequest;$loader = require_once __DIR__./../app/bootstrap.php.cache;require_once __DIR__./../app/AppKernel.php;$kernel = new AppKernel(prod, false);$kernel->loadClassCache();$request = Request::createFromGlobals();$response = $kernel->handle($request);$response->send();$kernel->terminate($request, $response);il Front Controller gestisce la richiesta: il metodo handle()kernel handle
  34. 34. http://traintosymfony.com34Emanuele Gaspari
  35. 35. http://traintosymfony.com35Emanuele Gasparifacciamo il puntocreare una Route che associ un url ad unazione contenuta in un Controllerfare in modo che lazione restituisca una risposta, tipicamente dopo avereseguito delle operazionise la risposta è html, stampare un template TWIG
  36. 36. http://traintosymfony.com36Emanuele GaspariintroSymfony2: what?usare un frameworkSymfony internalsnamespacesRequest e ResponseFront Controllerflusso di unapplicazioneHTTPRoutingclean urlsRoutes in SymfonyTemplatingTWIGrisposta HTMLOVERVIEW
  37. 37. http://traintosymfony.com37Emanuele GaspariHTTPHTTPnon importa con quali strumenti e in che modo sviluppi per il web,lobiettivo è SEMPREdi interpretare una richiesta e fornire una rispostalinguaggio testuale che permette a due macchine di comunicare1.1 RFC 2616/1999
  38. 38. http://traintosymfony.com38Emanuele Gasparilo schema seguente rappresenta tutta la complessità di una richiesta HTTP 1.1presta molta attenzioneATTENZIONE!warning
  39. 39. http://traintosymfony.com39Emanuele GaspariHTTPrichiestarispostaclient SERVERThe HTTP protocol is a request/response protocol. A client sends a request to the server in the form of a request method, URI, and protocol version,followed by a MIME-like message containing request modifiers, client information, and possible body content over a connection with a server. Theserver responds with a status line, including the messages protocol version and a success or error code, followed by a MIME-like message containingserver information, entity metainformation, and possible entity-body content.http://tools.ietf.org/html/rfc2068
  40. 40. http://traintosymfony.com40Emanuele Gaspariok, lo sapevograzie, lo sapevo già(o forse no)
  41. 41. http://traintosymfony.com41Emanuele Gasparibodyuna richiesta HTTPhttp://www.symfony.comhttp://www.symfony.com
  42. 42. http://traintosymfony.com42Emanuele GaspariobiettiviHTTP è uno standard e funziona molto beneè importante ricordarsi da dove si parte e cosa si vuole ottenereLadesione allo standard HTTP è un obiettivo di Symfony2
  43. 43. http://traintosymfony.com43Emanuele Gasparila filosofia“Symfony è progettato per soddisfare questa realtà.”"Se Symfony non offrisse altro, avresti comunque un kit di strumentiper un facile accesso alle informazioni di richiestae uninterfaccia object-oriented per la creazione della risposta.[...] lobiettivo della tua applicazione è sempre quello diinterpretare una richiesta e creare la risposta appropriata in base alla logicadellapplicazione."http://symfony.com/doc/current/book/http_fundamentals.html
  44. 44. http://traintosymfony.com44Emanuele Gasparifinora non ho avuto (particolari) problemi con$_GET, $_SERVER, etc..perché dovrei usare Symfony per la gestione di ogni richiesta?Request ResponseSymfony modella la richiesta e la risposta HTTP con le due classi PHPgestire le richieste
  45. 45. http://traintosymfony.com45Emanuele Gaspariun solo esempio può essere sufficiente
  46. 46. http://traintosymfony.com46Emanuele Gasparistring(35) "it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4"string(35) "it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4"// Contents of the Accept-Language: header from the current request, if there is one.$languages = $_SERVER[HTTP_ACCEPT_LANGUAGE];var_dump($languages);// Contents of the Accept-Language: header from the current request, if there is one.$languages = $_SERVER[HTTP_ACCEPT_LANGUAGE];var_dump($languages);HTTP_ACCEPT_LANGUAGEhttp://php.net/manual/en/reserved.variables.server.php
  47. 47. http://traintosymfony.com47Emanuele Gaspariarray(4) {[0]=> string(5) "it_IT"[1]=> string(2) "it"[2]=> string(5) "en_US"[3]=> string(2) "en"}array(4) {[0]=> string(5) "it_IT"[1]=> string(2) "it"[2]=> string(5) "en_US"[3]=> string(2) "en"}// Gets a list of languages acceptable by the client browser$languages = $this->getRequest()->getLanguages();var_dump($languages);// Gets a list of languages acceptable by the client browser$languages = $this->getRequest()->getLanguages();var_dump($languages);getLanguages()http://api.symfony.com/2.0/Symfony/Component/HttpFoundation/Request.html#method_getLanguages
  48. 48. http://traintosymfony.com48Emanuele Gasparinon re-inventare la ruotanon occuparsi di task ripetitiviABOUT: “Freddie Mercury Rage Pose” is a rage comic character made from a photo of the lead vocalist Freddie Mercury. The image is typically used to indicate that an extraordinaryfeat has been accomplished, similar to the Fuck Yeah illustration.Freddie Mercury Rage Pose
  49. 49. http://traintosymfony.com49Emanuele GaspariintroSymfony2: what?usare un frameworkSymfony internalsnamespacesRequest e ResponseFront Controllerflusso di unapplicazioneHTTPRoutingclean urlsRoutes in SymfonyTemplatingTWIGrisposta HTMLOVERVIEW
  50. 50. http://traintosymfony.com50Emanuele Gasparivorrei mostrare agli utenti dei clean urls (il più possibile)posizionamento sui motori di ricercaunivocità dellindirizzo webgli url “parlanti” migliorano la comunicazione/prodotto?codice=EG-124 /prodotto/EG-124clean urls
  51. 51. http://traintosymfony.com51Emanuele GaspariWordpress dà la possibilità di scegliere il formato dellurl di un post:wordpress
  52. 52. http://traintosymfony.com52Emanuele Gasparigestire gli urlCome sviluppatore vorrei un (buon) sistema per gestire url “parlanti”flessibilità: quanto mi costerebbe cambiare un url da /news a /press?nei templates HTML, al posto degli url vorrei usare dei segnapostovorrei che gli url fossero “generati”debug
  53. 53. http://traintosymfony.com53Emanuele GaspariintroSymfony2: what?usare un frameworkSymfony internalsnamespacesRequest e ResponseFront Controllerflusso di unapplicazioneHTTPRoutingclean urlsRoutes in SymfonyTemplatingTWIGrisposta HTMLOVERVIEW
  54. 54. http://traintosymfony.com54Emanuele Gaspari# app/config/routing.ymlprodotto_show:path: /prodotto/{codice}defaults: { _controller: TtsDemoBundle:Prodotto:show}# app/config/routing.ymlprodotto_show:path: /prodotto/{codice}defaults: { _controller: TtsDemoBundle:Prodotto:show}in Symfony una Route è unassociazione traun url e un Controller, tramite il parametro pathclass ProdottoController{public function showAction($codice) { […] }}class ProdottoController{public function showAction($codice) { […] }}/prodotto/EG-124/prodotto/DF-14/prodotto/SSX-01/prodotto/EG-124/prodotto/DF-14/prodotto/SSX-01RouteUrls ControllerRoutes
  55. 55. http://traintosymfony.com55Emanuele Gaspariprodotto_show:path: /prodotto/{codice}defaults: { _controller: TtsDemoBundle:Prodotto:show}Route namepathController e Action (nome logico)una Route
  56. 56. http://traintosymfony.com56Emanuele GaspariGET /prodotto/EG-124GET /prodotto/EG-27GET /prodotto/EG-74GET /prodotto/EG-124GET /prodotto/EG-27GET /prodotto/EG-74alcuni esempi di RoutesGET /GET /GET /catalogoGET /catalogoprodotto_show:path: /prodotto/{codice}defaults: [...]prodotto_show:path: /prodotto/{codice}defaults: [...]catalogo_index:path: /catalogodefaults: [...]catalogo_index:path: /catalogodefaults: [...]homepage:path: /defaults: [...]homepage:path: /defaults: [...]url e path
  57. 57. http://traintosymfony.com57Emanuele GaspariintroSymfony2: what?usare un frameworkSymfony internalsnamespacesRequest e ResponseFront Controllerflusso di unapplicazioneHTTPRoutingclean urlsRoutes in SymfonyTemplatingTWIGrisposta HTMLOVERVIEW
  58. 58. http://traintosymfony.com58Emanuele GaspariTWIGSymfony usa TWIG come linguaggio e motore di templating pergenerare contenuto HTMLTWIG permette di scrivere templates concisi e leggibili, sia dasviluppatori che da web designersoffre anche funzionalità avanzate utilizzabili in modo sempliceThe Twig logo is © 2010-2012 Sensio Labs
  59. 59. http://traintosymfony.com59Emanuele Gaspariesempio<ul>{% for item in menu_links %}<li><a href="{{ item.href }}">{{ item.label }}</a></li>{% endfor %}</ul><ul>{% for item in menu_links %}<li><a href="{{ item.href }}">{{ item.label }}</a></li>{% endfor %}</ul>uno dei punti di forza di TWIG è la leggibilità
  60. 60. http://traintosymfony.com60Emanuele GaspariintroSymfony2: what?usare un frameworkSymfony internalsnamespacesRequest e ResponseFront Controllerflusso di unapplicazioneHTTPRoutingclean urlsRoutes in SymfonyTemplatingTWIGrisposta HTMLOVERVIEW
  61. 61. http://traintosymfony.com61Emanuele Gasparirisposta HTMLnella terza fase del flusso request/response lazione produce una risposta
  62. 62. http://traintosymfony.com62Emanuele Gasparirisposta HTML●gestito la richiesta che arriva allapplicazione●analizzato i parametri di ingresso (GET, POST, SESSION, etc..)●utilizzato le risorse necessarie●eseguito delle operazioni●preparato i dati per la rispostadopo che lazione ha:...il passaggio successivo è preparare il contenuto HTML per il client
  63. 63. http://traintosymfony.com63Emanuele Gasparitemplate twigviene convertito (quasi sempre) in HTML per produrre il bodydella risposta da restituire al client●lazione “sceglie” un template●si passano (opzionalmente) delle variabili al template●TWIG effettua il parsing, generando HTML●la risposta viene inviata al clientin Symfony un template è semplicemente un file di testocontenente tag HTML e blocchi di sintassi TWIG
  64. 64. TRAINTO SYMFONYVerona, 13•14 Aprile 2013the frameworkshophttp://traintosymfony.com@TrainToSymfonyMedia partner:©Copyright Emanuele Gaspari Castelletti

×