0
Build smart and powerful web applications with Symfony2
Built around standalone and decoupled components…
… and a full-stack framework based     on those components
Application bundles                  Third party bundles                    The Symfony2 stack     Core Bundles           ...
« A Bundle is a directory that has a well-de nedstructure and can host anything from classes to       controllers and web ...
What makes Symfony2 unique?
Symfony2 follows standards     & best practices      -  RFC2616      -  PHPUnit   -  Jinja Templates   -  Design Patterns
Symfony is now easier to install and con gurehttp://symfony.com/download
Several distributions available      Download the Standard Edition that hosts the      framework, standard bundles and a d...
Easy installation and con guration
Web con gurationCon gure the database access parameters
Start to use Symfony2 and happy coding J
Want to give it a try?
Symfony2 Philosophy    « Basically, Symfony2 asks you to   convert a Request into a Response »
Request handling  class DefaultController extends Controller  {      /**        * @extra:Route("/hello/{name}")        */ ...
Request handling class DefaultController extends Controller {     /**       * @extra:Route("/hello/{name}")       */     p...
Request handling    class DefaultController extends Controller    {        /**          * @extra:Route("/schedule")       ...
Templating{% extends "ConfooConferenceBundle::layout.html.twig" %}{% block content %}    <h1> {{ title }} </h1>    <ul>   ...
TWIG Template EngineTwig is a modern template engine for PHP       §  Fast       §  Concise and rich syntax       §  Au...
Template inheritance{% extends "ConfooConferenceBundle::layout.html.twig" %}{% block content %}    <h1> {{ title }} </h1> ...
Template inheritance{% extends "::base.html.twig"   %}{% block body %}    <img src="/images/logo.gif" alt="Confoo 2011"/> ...
Template inheritance<!DOCTYPE html><html>    <head>        <meta http-equiv="Content-Type"            content="text/html; ...
Template inheritance base.html.twig                              layout.html.twig                       index.html.twig
Smart URIs
Smart URIs             Typical PHP URIs suck!!!
Smart URIs        Native routing mechanism
Smart URIs class DefaultController extends Controller {     /**       * @extra:Route("/{year}/talk/{month}/{day}/{slug}") ...
Parameter converter class DefaultController extends Controller {     /**       * @extra:Route("/talk/{id}")       * @extra...
Easy Debugging
The Web Debug ToolbarSymfony2 version environment environment            PHP          Current           Current response R...
Exception stack traces
Exception stack traces
Recorded logs
The Pro ler application
The Pro ler application
Database Management
Doctrine 2 Library §  Database Abstraction Layer on top of PDO §  Object Relational Mapper §  Migrations support §  Ob...
De ning entities as POPO/**	  * @orm:Entity	  */	class Talk	{	      /**	       * @orm:Id	       * @orm:GeneratedValue	    ...
Validation
Validation   §  Validate POPOs (properties & methods)   §  Easy con guration with annotations   §  Easy to customize an...
Validating Plain PHP Objects        class ContactRequest        {            /** @validation:NotBlank */            public...
Forms Handling
Forms management§  Transparent layer on top of your domain object§  Native CSRF protection§  Coupled to the Validation ...
Designing a basic form class     namespace ConfooContactBundleForm;     use   SymfonyComponentFormForm;     use   SymfonyC...
Processing a form   public function contactAction()   {       $contactRequest = new ContactRequest();       $form = Contac...
Prototyping the rendering with Twig {% extends ConfooContactBundle::layout.html.twig %} {% block content %} <form action="...
Functional Testing
Functional testing     Simulating an end-user browsing     scenario and testing the Response
Functional Testingclass DefaultControllerTest extends WebTestCase{    public function testIndex()    {        $client = $t...
HTTP Compliance (RFC2616)
Expiration / Validation
Expiration with Expires    class DefaultController extends Controller    {        /**          * @extra:Route("/schedule")...
Expiration with Cache-Control    class DefaultController extends Controller    {        /**          * @extra:Route("/sche...
Native PHP Reverse Proxy Cache
Varnish / Squid
Edge Side Includes<esi:include src="http://..." />
SecurityAuthentication & Authorization
Thank You!
Build powerfull and smart web applications with Symfony2
Upcoming SlideShare
Loading in...5
×

Build powerfull and smart web applications with Symfony2

12,053

Published on

Symfony2 first stable release is scheduled for the first week of March 2011. During this session, we will have a look at the new framework architecture and most of its powerfull features.

We will show you how Symfony2 implements the MVC pattern and an HTTP request is processed and converted as a response for the end user. Of course, we will talk about the configuration principles and how it's easy to configure Symfony2 project parts like the routing system or the data model. We will also focus on other major components of the framework like the Doctrine2 integration, forms, security (authentication and authorizations) or HTTP cache management.

Published in: Technology
0 Comments
8 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
12,053
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
233
Comments
0
Likes
8
Embeds 0
No embeds

No notes for slide

Transcript of "Build powerfull and smart web applications with Symfony2"

  1. 1. Build smart and powerful web applications with Symfony2
  2. 2. Built around standalone and decoupled components…
  3. 3. … and a full-stack framework based on those components
  4. 4. Application bundles Third party bundles The Symfony2 stack Core Bundles Third party libraries Standalone Components
  5. 5. « A Bundle is a directory that has a well-de nedstructure and can host anything from classes to controllers and web resources.  »
  6. 6. What makes Symfony2 unique?
  7. 7. Symfony2 follows standards & best practices -  RFC2616 -  PHPUnit -  Jinja Templates -  Design Patterns
  8. 8. Symfony is now easier to install and con gurehttp://symfony.com/download
  9. 9. Several distributions available Download the Standard Edition that hosts the framework, standard bundles and a default application architecture.
  10. 10. Easy installation and con guration
  11. 11. Web con gurationCon gure the database access parameters
  12. 12. Start to use Symfony2 and happy coding J
  13. 13. Want to give it a try?
  14. 14. Symfony2 Philosophy « Basically, Symfony2 asks you to convert a Request into a Response »
  15. 15. Request handling class DefaultController extends Controller { /** * @extra:Route("/hello/{name}") */ public function indexAction($name) { // ... do things return new Response(sprintf(Hello %s!, $name)); } }
  16. 16. Request handling class DefaultController extends Controller { /** * @extra:Route("/hello/{name}") */ public function indexAction($name) { // ... do things return $this->render(HelloBundle:Default:index.html.twig, array(name => $name)); } }
  17. 17. Request handling class DefaultController extends Controller { /** * @extra:Route("/schedule") * @extra:Template */ public function indexAction() { $title = Confoo 2011 Conferences Schedule; return array(title => $title); } }
  18. 18. Templating{% extends "ConfooConferenceBundle::layout.html.twig" %}{% block content %} <h1> {{ title }} </h1> <ul> <li>Caching on the Edge, by Fabien Potencier</li> <li>HipHop for PHP, by Scott Mac Vicar</li> <li>XDebug, by Derick Rethans</li> <li>...</li> </ul>{% endblock %}
  19. 19. TWIG Template EngineTwig is a modern template engine for PHP §  Fast §  Concise and rich syntax §  Automatic output escaping §  Modern features §  Extensible §  Flexible
  20. 20. Template inheritance{% extends "ConfooConferenceBundle::layout.html.twig" %}{% block content %} <h1> {{ title }} </h1> <ul> <li>Caching on the Edge, by Fabien Potencier</li> <li>HipHop for PHP, by Scott Mac Vicar</li> <li>XDebug, by Derick Rethans</li> <li>...</li> </ul>{% endblock %}
  21. 21. Template inheritance{% extends "::base.html.twig" %}{% block body %} <img src="/images/logo.gif" alt="Confoo 2011"/> {% block content %}{% endblock %}{% endblock %}
  22. 22. Template inheritance<!DOCTYPE html><html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>{% block title %}Welcome!{% endblock %}</title> <link rel="shortcut icon" href="{{ asset(favicon.ico) }}" /> </head> <body> {% block body %}{% endblock %} </body></html>
  23. 23. Template inheritance base.html.twig layout.html.twig index.html.twig
  24. 24. Smart URIs
  25. 25. Smart URIs Typical PHP URIs suck!!!
  26. 26. Smart URIs Native routing mechanism
  27. 27. Smart URIs class DefaultController extends Controller { /** * @extra:Route("/{year}/talk/{month}/{day}/{slug}") * @extra:Template */ public function showAction($slug, $day, $month, $year) { // Get a talk object from the database $talk = ...; return array(talk => $talk); } }
  28. 28. Parameter converter class DefaultController extends Controller { /** * @extra:Route("/talk/{id}") * @extra:Template */ public function showAction(Talk $talk) { return array(talk => $talk); } }
  29. 29. Easy Debugging
  30. 30. The Web Debug ToolbarSymfony2 version environment environment PHP Current Current response RecordedTimers Memory logs Queries
  31. 31. Exception stack traces
  32. 32. Exception stack traces
  33. 33. Recorded logs
  34. 34. The Pro ler application
  35. 35. The Pro ler application
  36. 36. Database Management
  37. 37. Doctrine 2 Library §  Database Abstraction Layer on top of PDO §  Object Relational Mapper §  Migrations support §  Object Document Mapper (MongoDB) §  Object XML Mapper (XML databases)
  38. 38. De ning entities as POPO/** * @orm:Entity */ class Talk { /** * @orm:Id * @orm:GeneratedValue * @orm:Column(type="integer") */ public $id; /** @orm:Column(length=80, nullable=false) */ public $title; /** @orm:Column(type="text") */ public $synopsis; /** @orm:Column(type="datetime") */ public $schedule; /** @orm:ManyToMany(targetEntity="Speaker", mappedBy="talks") */ public $speakers; }
  39. 39. Validation
  40. 40. Validation §  Validate POPOs (properties & methods) §  Easy con guration with annotations §  Easy to customize and extend
  41. 41. Validating Plain PHP Objects class ContactRequest { /** @validation:NotBlank */ public $message; /** * @validation:Email * @validation:NotBlank */ public $sender; } }
  42. 42. Forms Handling
  43. 43. Forms management§  Transparent layer on top of your domain object§  Native CSRF protection§  Coupled to the Validation framework§  Twig integration
  44. 44. Designing a basic form class namespace ConfooContactBundleForm; use SymfonyComponentFormForm; use SymfonyComponentFormTextField; use SymfonyComponentFormTextareaField; use SymfonyComponentFormCheckboxField; class ContactForm extends Form { protected function configure() { $this->add(new TextField(sender))); $this->add(new TextareaField(message)); } }
  45. 45. Processing a form public function contactAction() { $contactRequest = new ContactRequest(); $form = ContactForm::create(...); $form->bind($this->get(request), $contactRequest); if ($form->isValid()) { // do things with validated data } return array(form => $form); }
  46. 46. Prototyping the rendering with Twig {% extends ConfooContactBundle::layout.html.twig %} {% block content %} <form action="#" method="post"> {{ form_field(form) }} <input type="submit" value="Send!" /> </form> {% endblock %}
  47. 47. Functional Testing
  48. 48. Functional testing Simulating an end-user browsing scenario and testing the Response
  49. 49. Functional Testingclass DefaultControllerTest extends WebTestCase{ public function testIndex() { $client = $this->createClient(); $crawler = $client->request(GET, /schedule); $this->assertTrue( $crawler->filter(html:contains("Fabien Potencier"))->count() > 0 ); $this->assertTrue($client->getResponse()->headers->has(expires)); }}
  50. 50. HTTP Compliance (RFC2616)
  51. 51. Expiration / Validation
  52. 52. Expiration with Expires class DefaultController extends Controller { /** * @extra:Route("/schedule") * @extra:Template * @extra:Cache(expires="tomorrow") */ public function indexAction() { $title = Confoo 2011 Conferences Schedule; return array(title => $title); } }
  53. 53. Expiration with Cache-Control class DefaultController extends Controller { /** * @extra:Route("/schedule") * @extra:Template * @extra:Cache(maxage="20", s-maxage="20") */ public function indexAction() { $title = Confoo 2011 Conferences Schedule; return array(title => $title); } }
  54. 54. Native PHP Reverse Proxy Cache
  55. 55. Varnish / Squid
  56. 56. Edge Side Includes<esi:include src="http://..." />
  57. 57. SecurityAuthentication & Authorization
  58. 58. Thank You!
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×