Your SlideShare is downloading. ×
0
Symfony2                         The Next Generation                           PHP Framework                              ...
Who is this dude?                  • Co-author of the Symfony2 Docs                  • Core Symfony2 contributor          ...
KnpLabs                         Quality. Innovation. Excitement.                         • Your symfony/Symfony2 developme...
Act 1:                         What is Symphony?                               Symfony!Thursday, May 12, 2011
A Bunch of Standalone Libs                   Routing       HttpFoundation    Doctrine2 DBAL      Security                D...
A Bunch of Standalone Libs                  Symfony is a group of             Routing HttpFoundation Doctrine2 DBAL       ...
Routing          DependencyInjection         HttpFoundation         Assetic            Doctrine2 DBAL        Security     ...
Routing          DependencyInjection         HttpFoundation         Assetic            Doctrine2 DBAL        Security     ...
The Flexibility of Bundles                    • A bundle is like a plugin, except that even the                    core fr...
Symfony2 is a set of                 standalone PHP component                libraries, glued together by a               ...
Act 2:                         Keep Things SimpleThursday, May 12, 2011
From space, the Web is stupid-simple                                       the request                                    ...
HTTP Request-Response                   • Your job is always to generate and return a                   response          ...
Keep it simple: write code that             represents your business logic             - don’t bend to your frameworkThurs...
Act 3:                         Symfony in ActionThursday, May 12, 2011
Symfony Distributions                     • Symfony offers “distributions” (think Ubuntu)                     • Download t...
Step 1: Get it!                         http://symfony.com/downloadThursday, May 12, 2011
Step 2: Unzip it!  $ cd /path/to/webroot  $ tar zxvf /path/to/Symfony_Standard_Vendors_2.0.0PR11.tgzThursday, May 12, 2011
Step 3: Run it!            http://localhost/Symfony/web/config.phpThursday, May 12, 2011
Step 3: Run it!                     • This page identifies any problems with your                     setup                ...
Step 3: Configure it!     If you’re into    GUI’s, Symfony     offers one for    setting up your  basic configurationThursda...
Finished!       This *is* your       first Symfony2            pageThursday, May 12, 2011
Act 4:                         Let’s create some pagesThursday, May 12, 2011
The 3 Steps to a Page                the request!                                         /hello/ryan                     ...
Hello {insert-name}!                   • Our goal: to create a hello world-like app                   • in two small steps...
Step1: Define a route                         You define the routes (URLs) of your app                                   _we...
Step1: Define a route                                Add the following route to                                 app/config/r...
Step 2: Symfony executes                         the controller of the route                    hello_demo:               ...
Step2: Create the controller                         <?php                         // src/Acme/DemoBundle/Controller/Meetu...
Step2: Create the controller                         <?php                         // src/Acme/DemoBundle/Controller/Meetu...
The Controller returns a                           Symfony Response object                         use SymfonyComponentHtt...
Routing Placeholders                                The route matches URLs like /hello/*                         hello_dem...
It’s Alive!    http://localhost/Symfony/web/app_dev.php/hello/ryanThursday, May 12, 2011
2 steps to a page                   • Create a route that points to a controller                   • Do anything you want ...
That was easy... what are              some other tools I can choose                        to use?Thursday, May 12, 2011
Rendering a Template                  • A template is a tool that you may choose to use                  • A template is u...
Do It!                               Render a template in the controller                         public function helloActi...
Do it!                                        Create the template file              {# src/Acme/DemoBundle/Resources/views/...
It’s Still Alive!    http://localhost/Symfony/web/app_dev.php/hello/ryanThursday, May 12, 2011
Twig knows all kinds of tricks                   • Learn more about Twig:                          “Hands on Symfony2” on ...
Act 5:                         Shortcuts via AnnotationsThursday, May 12, 2011
The optional                  FrameworkExtraBundle lets                   you use annotations to do                       ...
Put the route right on your controller                  /**                    * @extra:Route("/hello/{name}", name="hello...
Put the route right on your controller                         /**                           * @extra:Route("/hello/{name}...
Instead of rendering a template, tell                                 Symfony to do it for you                         /**...
/**                             * @extra:Route("/hello/{name}", name="hello_demo")                             * @extra:Te...
If you choose to follow                conventions, you can take              advantage of certain shortcutsThursday, May ...
Add security                   /**                     * @extra:Route("/hello/admin/{name}")                     * @extra:...
Add caching                         /**                           * @extra:Route("/hello/{name})                          ...
Act 5:                         The Killer Features of                              Symfony2Thursday, May 12, 2011
#1 Crazy-Decoupled & Extensible                  • Composed of nearly 30 independent libraries                  • Your cod...
#2 The Developer Experience                  • You’re in the driver’s seat, not the framework                  • Great eff...
The web debug toolbarThursday, May 12, 2011
The ProfilerThursday, May 12, 2011
#3 HTTP Caching                  • Instead of inventing a caching strategy,                  Symfony uses the HTTP Cache s...
#3 HTTP Caching                  • Symfony2 ships with a reverse proxy built in                  pure PHP                 ...
#4 The Security Component                  • Based on the Security Component of the                  Spring Framework     ...
#5 Silex: The Microframework                                   http://silex-project.org/                  • Microframework...
#6 The hyperactive community                         • 190+ core contributors                         • 90+ documentation ...
Symfony2Bundles.org                         • 223 open source bundles                         • 74 open source projects   ...
And lot’s more                • Cache-warming framework                • Routing can be dumped as Apache rewrite rules    ...
After-Dinner Mint          Standalone PHP Libraries from             the Symfony CommunityThursday, May 12, 2011
Assetic                         https://github.com/kriswallsmith/assetic                  • PHP asset management framework...
Behat + Mink                                 http://behat.org/                  • Behavioral-driven development framework ...
Gaufrette                          https://github.com/knplabs/Gaufrette                  • PHP filesystem abstraction libra...
Imagine                         https://github.com/avalanche123/Imagine                  • PHP Image manipulation library ...
Deployment with Capifony                                  http://capifony.org/                  • Capistrano deployment fo...
The RestBundle                   • For a fully-featured RESTful API solution try                   out the RestBundle     ...
And early support from a few                         big namesThursday, May 12, 2011
PhpStorm                         http://www.jetbrains.com/phpstorm/                  • PHP IDE now supports Twig Templates...
Support for Orchestra                                   http://orchestra.io/                  • Orchestra is a PHP platfor...
Last wordsThursday, May 12, 2011
Symfony2 is...                  • Fast as hell                  • Infinitely flexible                  • Fully-featured     ...
Backwards Compatibility           breaks are possible, but will be                 well-documentedThursday, May 12, 2011
So dive in!Thursday, May 12, 2011
Thanks!                                     Questions?                                 Ryan Weaver                        ...
Who is this dude?                    • Co-author of the Symfony2 Docs                    • Core Symfony2 contributor      ...
KnpLabs                         Quality. Innovation. Excitement.                         • symfony/Symfony2 development   ...
Symfony2 Training                     • Right here in Nashville: May 19th & 20th                         • real coding, re...
Upcoming SlideShare
Loading in...5
×

Symony2 A Next Generation PHP Framework

9,931

Published on

A mixture of architecture and hands-on examples, this presentation takes you through the killer features of Symfony2, how it's so decoupled, and how you can get started developing in it.

As an added bonus, a number of new standalone PHP libraries and tools are mentioned at the end.

Published in: Technology, Education
4 Comments
18 Likes
Statistics
Notes
No Downloads
Views
Total Views
9,931
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
217
Comments
4
Likes
18
Embeds 0
No embeds

No notes for slide

Transcript of "Symony2 A Next Generation PHP Framework"

  1. 1. Symfony2 The Next Generation PHP Framework Ryan Weaver @weaverryanThursday, May 12, 2011
  2. 2. Who is this dude? • Co-author of the Symfony2 Docs • Core Symfony2 contributor • Founder of KnpLabs US • Boyfriend of the much more talented @leannapelham http://www.knplabs.com/en http://www.github.com/weaverryanThursday, May 12, 2011
  3. 3. KnpLabs Quality. Innovation. Excitement. • Your symfony/Symfony2 development experts • Active in a ton of open source initiatives • Consulting, application auditing and training http://bit.ly/symfony-trainingThursday, May 12, 2011
  4. 4. Act 1: What is Symphony? Symfony!Thursday, May 12, 2011
  5. 5. A Bunch of Standalone Libs Routing HttpFoundation Doctrine2 DBAL Security DependencyInjection EventDispatcher Assetic Translation Form Validator Monolog Doctrine2 ORM Twig ClassLoader HttpKernel Doctrine2 ODM SwiftMailer Serializer Templating CSSSelector Console BrowserKit Yaml Process DomCrawler FinderThursday, May 12, 2011
  6. 6. A Bunch of Standalone Libs Symfony is a group of Routing HttpFoundation Doctrine2 DBAL Security standalone components and DependencyInjection EventDispatcher Assetic Translation other standalone PHP libraries Form Validator Monolog Doctrine2 ORM Twig Decoupled building blocks for ClassLoader HttpKernel Doctrine2 ODM SwiftMailer Serializer any web application BrowserKit Templating CSSSelector Console Yaml Process DomCrawler FinderThursday, May 12, 2011
  7. 7. Routing DependencyInjection HttpFoundation Assetic Doctrine2 DBAL Security Form Validator HttpKernel EventDispatcher Doctrine2 ORM Twig Translation ClassLoader Process Templating Monolog CSSSelector Doctrine2 ODM SwiftMailer Serializer Yaml DomCrawler Console Finder BrowserKit What is the Symfony2 Framework? • A set of bundles containing configuration and bridge classes • These glue the components together, giving the developer a consistent experienceThursday, May 12, 2011
  8. 8. Routing DependencyInjection HttpFoundation Assetic Doctrine2 DBAL Security Form Validator HttpKernel EventDispatcher Doctrine2 ORM Twig Translation ClassLoader Process Templating Monolog CSSSelector Doctrine2 ODM SwiftMailer Serializer Yaml DomCrawler Console Finder BrowserKit FrameworkBundle SecurityBundle DoctrineBundle TwigBundle MonologBundle SwiftmailerBundle WebProfilerBundle AsseticBundle The Symfony2 FrameworkThursday, May 12, 2011
  9. 9. The Flexibility of Bundles • A bundle is like a plugin, except that even the core framework is implemented as bundles • Your code is an equal citizen with the core FrameworkBundle SecurityBundle AcmeBlogBundle AcmeTwigBundle TwigBundle MonologBundle AcmeAccountBundle WebProfilerBundleThursday, May 12, 2011
  10. 10. Symfony2 is a set of standalone PHP component libraries, glued together by a group of removable “bundles”Thursday, May 12, 2011
  11. 11. Act 2: Keep Things SimpleThursday, May 12, 2011
  12. 12. From space, the Web is stupid-simple the request /foo Client Your App (e.g. browser) <h1>FOO!</h1> the responseThursday, May 12, 2011
  13. 13. HTTP Request-Response • Your job is always to generate and return a response • Symfony’s goal is to: • take care of repetitive tasks (e.g. routing) • allow your code to be organized • offer optional tools for complex tasks (e.g. security, forms, etc) • to stay the hell out of your way!Thursday, May 12, 2011
  14. 14. Keep it simple: write code that represents your business logic - don’t bend to your frameworkThursday, May 12, 2011
  15. 15. Act 3: Symfony in ActionThursday, May 12, 2011
  16. 16. Symfony Distributions • Symfony offers “distributions” (think Ubuntu) • Download the “Standard Distribution” to instantly have a functional application • Default Project Structure • Common Sense default configuration • Some demo pages to play with Start developing immediately!!!Thursday, May 12, 2011
  17. 17. Step 1: Get it! http://symfony.com/downloadThursday, May 12, 2011
  18. 18. Step 2: Unzip it! $ cd /path/to/webroot $ tar zxvf /path/to/Symfony_Standard_Vendors_2.0.0PR11.tgzThursday, May 12, 2011
  19. 19. Step 3: Run it! http://localhost/Symfony/web/config.phpThursday, May 12, 2011
  20. 20. Step 3: Run it! • This page identifies any problems with your setup • Fix them, then click “Configure your Symfony Application online” to continueThursday, May 12, 2011
  21. 21. Step 3: Configure it! If you’re into GUI’s, Symfony offers one for setting up your basic configurationThursday, May 12, 2011
  22. 22. Finished! This *is* your first Symfony2 pageThursday, May 12, 2011
  23. 23. Act 4: Let’s create some pagesThursday, May 12, 2011
  24. 24. The 3 Steps to a Page the request! /hello/ryan Step1: Symfony matches the URL to a route Step2: Symfony executes the controller (a the edge of a PHP function) of the route giant flower! Step3: The controller (your code) returns a Symfony Response object the response! <h1>Hello ryan!</h1>Thursday, May 12, 2011
  25. 25. Hello {insert-name}! • Our goal: to create a hello world-like app • in two small steps...Thursday, May 12, 2011
  26. 26. Step1: Define a route You define the routes (URLs) of your app _welcome: / pattern: / defaults: { _controller: AcmeDemoBundle:Welcome:index } hello_demo: /hello/ryan pattern: /hello/{name} defaults: { _controller: AcmeDemoBundle:Meetup:hello }Thursday, May 12, 2011
  27. 27. Step1: Define a route Add the following route to app/config/routing.yml hello_demo: pattern: /hello/{name} defaults: { _controller: AcmeDemoBundle:Meetup:hello } ** Routes can also be defined in XML, PHP and as annotationsThursday, May 12, 2011
  28. 28. Step 2: Symfony executes the controller of the route hello_demo: pattern: /hello/{name} defaults: { _controller: AcmeDemoBundle:Meetup:hello } AcmeDemoBundle:Meetup:hello is a shortcut for AcmeDemoBundleControllerMeetupController::helloAction() Symfony executes this PHP methodThursday, May 12, 2011
  29. 29. Step2: Create the controller <?php // src/Acme/DemoBundle/Controller/MeetupController.php namespace AcmeDemoBundleController; use SymfonyComponentHttpFoundationResponse; use SymfonyBundleFrameworkBundleControllerController; class MeetupController extends Controller { public function helloAction($name) { return new Response(Hello .$name); } }Thursday, May 12, 2011
  30. 30. Step2: Create the controller <?php // src/Acme/DemoBundle/Controller/MeetupController.php namespace AcmeDemoBundleController; use SymfonyComponentHttpFoundationResponse; use SymfonyBundleFrameworkBundleControllerController; class MeetupController extends Controller { public function helloAction($name) { return new Response(Hello .$name); } } OMG - no base controller class required!Thursday, May 12, 2011
  31. 31. The Controller returns a Symfony Response object use SymfonyComponentHttpFoundationResponse; public function helloAction($name) { return new Response(Hello .$name); } This is where *your* code goes Returning a Response object is the only requirement of a controllerThursday, May 12, 2011
  32. 32. Routing Placeholders The route matches URLs like /hello/* hello_demo: pattern: /hello/{name} defaults: { _controller: AcmeDemoBundle:Meetup:hello } use SymfonyComponentHttpFoundationResponse; public function helloAction($name) { return new Response(Hello .$name); } And gives you access to the {name} valueThursday, May 12, 2011
  33. 33. It’s Alive! http://localhost/Symfony/web/app_dev.php/hello/ryanThursday, May 12, 2011
  34. 34. 2 steps to a page • Create a route that points to a controller • Do anything you want inside the controller, but eventually return a Response objectThursday, May 12, 2011
  35. 35. That was easy... what are some other tools I can choose to use?Thursday, May 12, 2011
  36. 36. Rendering a Template • A template is a tool that you may choose to use • A template is used to generate “presentation” code (e.g. HTML) • Keep your pretty (<div>) code away from your nerdy ($foo->sendEmail($body)) codeThursday, May 12, 2011
  37. 37. Do It! Render a template in the controller public function helloAction($name) { $content = $this->renderView( AcmeDemoBundle:Meetup:hello.html.twig, array(name => $name) ); return new Response($content); }Thursday, May 12, 2011
  38. 38. Do it! Create the template file {# src/Acme/DemoBundle/Resources/views/Meetup/hello.html.twig #} Hello {{ name }} This is Twig Twig is a fast, secure and powerful templating engine We *LOVE* Twig... but Symfony2 fully supports Twig and regular PHP templatesThursday, May 12, 2011
  39. 39. It’s Still Alive! http://localhost/Symfony/web/app_dev.php/hello/ryanThursday, May 12, 2011
  40. 40. Twig knows all kinds of tricks • Learn more about Twig: “Hands on Symfony2” on Slideshare http://bit.ly/hands-on-symfony2 “Being Dangerous with Twig” on Slideshare http://bit.ly/dangerous-with-twig Official Documentation http://www.twig-project.orgThursday, May 12, 2011
  41. 41. Act 5: Shortcuts via AnnotationsThursday, May 12, 2011
  42. 42. The optional FrameworkExtraBundle lets you use annotations to do less workThursday, May 12, 2011
  43. 43. Put the route right on your controller /** * @extra:Route("/hello/{name}", name="hello_demo") */ public function helloAction($name) { $content = $this->renderView( AcmeDemoBundle:Meetup:hello.html.twig, array(name => $name) ); return new Response($content); }Thursday, May 12, 2011
  44. 44. Put the route right on your controller /** * @extra:Route("/hello/{name}", name="hello_demo") */ The PHP comments are public function helloAction($name) { $content = $this->renderView( called “annotations” AcmeDemoBundle:Meetup:hello.html.twig, array(name => $name) ); return new Response($content); } Symfony can use annotations to read routing config Your route and controller are in the same place!Thursday, May 12, 2011
  45. 45. Instead of rendering a template, tell Symfony to do it for you /** * @extra:Route("/hello/{name}", name="hello_demo") * @extra:Template() */ public function helloAction($name) { return array(name => $name); }Thursday, May 12, 2011
  46. 46. /** * @extra:Route("/hello/{name}", name="hello_demo") * @extra:Template() */ public function helloAction($name) { return array(name => $name); } Controller: AcmeDemoBundle:Meetup:hello Template: AcmeDemoBundle:Meetup:hello.html.twigThursday, May 12, 2011
  47. 47. If you choose to follow conventions, you can take advantage of certain shortcutsThursday, May 12, 2011
  48. 48. Add security /** * @extra:Route("/hello/admin/{name}") * @extra:Secure(roles="ROLE_ADMIN") * @extra:Template() */ public function helloAdminAction($name) { return array(name => $name); }Thursday, May 12, 2011
  49. 49. Add caching /** * @extra:Route("/hello/{name}) * @extra:Template() * @extra:Cache(maxage="86400") */ public function helloAction($name) { return array(name => $name); }Thursday, May 12, 2011
  50. 50. Act 5: The Killer Features of Symfony2Thursday, May 12, 2011
  51. 51. #1 Crazy-Decoupled & Extensible • Composed of nearly 30 independent libraries • Your code has as many rights as the core code • Heavy use of the observer pattern (i.e. events) • Standards Compliant (e.g. PSR-0)Thursday, May 12, 2011
  52. 52. #2 The Developer Experience • You’re in the driver’s seat, not the framework • Great effort has gone into expressive exception messages at every potential pain point • The Web Debug Toolbar and ProfilerThursday, May 12, 2011
  53. 53. The web debug toolbarThursday, May 12, 2011
  54. 54. The ProfilerThursday, May 12, 2011
  55. 55. #3 HTTP Caching • Instead of inventing a caching strategy, Symfony uses the HTTP Cache specification public function helloAction($name) { $response = // ... $response->setMaxAge(86400); return $response; }Thursday, May 12, 2011
  56. 56. #3 HTTP Caching • Symfony2 ships with a reverse proxy built in pure PHP • Swap it out for Varnish, Squid or another other HTTP cache • Native support for edge side includes (ESI)Thursday, May 12, 2011
  57. 57. #4 The Security Component • Based on the Security Component of the Spring Framework • Firewalls can authenticate users via any method: HTTP Auth, X.509 certificate, form login, Twitter, etc, etc • Framework for advanced ACLs via DoctrineThursday, May 12, 2011
  58. 58. #5 Silex: The Microframework http://silex-project.org/ • Microframework built from Symfony2 Components require_once __DIR__./silex.phar; $app = new SilexApplication(); $app->get(/hello/{name}, function($name) { return "Hello $name"; }); $app->run(); • It’s just that easyThursday, May 12, 2011
  59. 59. #6 The hyperactive community • 190+ core contributors • 90+ documentation contributors • 223 open source Symfony2 bundles • 74 open source Symfony2 projects ... and counting ...Thursday, May 12, 2011
  60. 60. Symfony2Bundles.org • 223 open source bundles • 74 open source projects http://symfony2bundles.org/Thursday, May 12, 2011
  61. 61. And lot’s more • Cache-warming framework • Routing can be dumped as Apache rewrite rules • Service container can be dumped to Graphviz • RESTful APIS support via the RestBundle https://github.com/FriendsOfSymfony/RestBundleThursday, May 12, 2011
  62. 62. After-Dinner Mint Standalone PHP Libraries from the Symfony CommunityThursday, May 12, 2011
  63. 63. Assetic https://github.com/kriswallsmith/assetic • PHP asset management framework • Run CSS and JS through filters • LESS, SASS and others • Compress the assets • Compile CSS and JS into a single file eachThursday, May 12, 2011
  64. 64. Behat + Mink http://behat.org/ • Behavioral-driven development framework • Write human-readable sentences that test your code (and can be run in a browser)Thursday, May 12, 2011
  65. 65. Gaufrette https://github.com/knplabs/Gaufrette • PHP filesystem abstraction library // ... setup your filesystem $content = $filesystem->read(myFile); $content = Hello I am the new content; $filesystem->write(myFile, $content); • Read and write from Amazon S3 or FTP like a local filesystemThursday, May 12, 2011
  66. 66. Imagine https://github.com/avalanche123/Imagine • PHP Image manipulation library use ImagineImageBox; use ImagineImagePoint; $image->resize(new Box(15, 25)) ->rotate(45) ->crop(new Point(0, 0), new Box(45, 45)) ->save(/path/to/new/image.jpg); • Does crazy things and has crazy docsThursday, May 12, 2011
  67. 67. Deployment with Capifony http://capifony.org/ • Capistrano deployment for symfony1 and Symfony2 $ cap deploy:setup $ cap deploy $ cap deploy:rollbackThursday, May 12, 2011
  68. 68. The RestBundle • For a fully-featured RESTful API solution try out the RestBundle • Provides a view layer to enable format agnostic controllers https://github.com/FriendsOfSymfony/RestBundleThursday, May 12, 2011
  69. 69. And early support from a few big namesThursday, May 12, 2011
  70. 70. PhpStorm http://www.jetbrains.com/phpstorm/ • PHP IDE now supports Twig TemplatesThursday, May 12, 2011
  71. 71. Support for Orchestra http://orchestra.io/ • Orchestra is a PHP platform for deploying, scaling and managing your PHP applications. • They’re awesome... • And they support Symfony2! https://orchestra.tenderapp.com/kb/frameworks/symfony2Thursday, May 12, 2011
  72. 72. Last wordsThursday, May 12, 2011
  73. 73. Symfony2 is... • Fast as hell • Infinitely flexible • Fully-featured • Driven by a huge community • Not released yet... Currently at beta1Thursday, May 12, 2011
  74. 74. Backwards Compatibility breaks are possible, but will be well-documentedThursday, May 12, 2011
  75. 75. So dive in!Thursday, May 12, 2011
  76. 76. Thanks! Questions? Ryan Weaver @weaverryan Symfony2 Training in Nashville Join us May 19th & 20thThursday, May 12, 2011
  77. 77. Who is this dude? • Co-author of the Symfony2 Docs • Core Symfony2 contributor • Founder of KnpLabs US • Big geek http://www.twitter.com/weaverryan http://www.github.com/weaverryanThursday, May 12, 2011
  78. 78. KnpLabs Quality. Innovation. Excitement. • symfony/Symfony2 development • Consulting & application auditing • Symfony2 TrainingThursday, May 12, 2011
  79. 79. Symfony2 Training • Right here in Nashville: May 19th & 20th • real coding, real project • Doctrine2, forms, security, caching, etc • Cool libraries like Assetic, Imagine, Behat • Lot’s more • Or join is in New York City: June 6th & 7th http://bit.ly/symfony-trainingThursday, May 12, 2011
  1. A particular slide catching your eye?

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

×