Symony2 A Next Generation PHP Framework
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Symony2 A Next Generation PHP Framework

  • 10,535 views
Uploaded 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....

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.

More in: Technology , Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
10,535
On Slideshare
10,205
From Embeds
330
Number of Embeds
6

Actions

Shares
Downloads
211
Comments
4
Likes
18

Embeds 330

https://twitter.com 265
http://waffleme.com 47
http://coderwall.com 10
http://twitter.com 4
http://www.sfexception.com 3
http://www.linkedin.com 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Symfony2 The Next Generation PHP Framework Ryan Weaver @weaverryanThursday, May 12, 2011
  • 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. 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. Act 1: What is Symphony? Symfony!Thursday, May 12, 2011
  • 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. 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. 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. 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. 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. Symfony2 is a set of standalone PHP component libraries, glued together by a group of removable “bundles”Thursday, May 12, 2011
  • 11. Act 2: Keep Things SimpleThursday, May 12, 2011
  • 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. 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. Keep it simple: write code that represents your business logic - don’t bend to your frameworkThursday, May 12, 2011
  • 15. Act 3: Symfony in ActionThursday, May 12, 2011
  • 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. Step 1: Get it! http://symfony.com/downloadThursday, May 12, 2011
  • 18. Step 2: Unzip it! $ cd /path/to/webroot $ tar zxvf /path/to/Symfony_Standard_Vendors_2.0.0PR11.tgzThursday, May 12, 2011
  • 19. Step 3: Run it! http://localhost/Symfony/web/config.phpThursday, May 12, 2011
  • 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. Step 3: Configure it! If you’re into GUI’s, Symfony offers one for setting up your basic configurationThursday, May 12, 2011
  • 22. Finished! This *is* your first Symfony2 pageThursday, May 12, 2011
  • 23. Act 4: Let’s create some pagesThursday, May 12, 2011
  • 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. Hello {insert-name}! • Our goal: to create a hello world-like app • in two small steps...Thursday, May 12, 2011
  • 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. 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. 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. 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. 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. 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. 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. It’s Alive! http://localhost/Symfony/web/app_dev.php/hello/ryanThursday, May 12, 2011
  • 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. That was easy... what are some other tools I can choose to use?Thursday, May 12, 2011
  • 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. 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. 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. It’s Still Alive! http://localhost/Symfony/web/app_dev.php/hello/ryanThursday, May 12, 2011
  • 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. Act 5: Shortcuts via AnnotationsThursday, May 12, 2011
  • 42. The optional FrameworkExtraBundle lets you use annotations to do less workThursday, May 12, 2011
  • 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. 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. 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. /** * @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. If you choose to follow conventions, you can take advantage of certain shortcutsThursday, May 12, 2011
  • 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. 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. Act 5: The Killer Features of Symfony2Thursday, May 12, 2011
  • 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. #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. The web debug toolbarThursday, May 12, 2011
  • 54. The ProfilerThursday, May 12, 2011
  • 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. #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. #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. #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. #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. Symfony2Bundles.org • 223 open source bundles • 74 open source projects http://symfony2bundles.org/Thursday, May 12, 2011
  • 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. After-Dinner Mint Standalone PHP Libraries from the Symfony CommunityThursday, May 12, 2011
  • 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. 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. 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. 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. Deployment with Capifony http://capifony.org/ • Capistrano deployment for symfony1 and Symfony2 $ cap deploy:setup $ cap deploy $ cap deploy:rollbackThursday, May 12, 2011
  • 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. And early support from a few big namesThursday, May 12, 2011
  • 70. PhpStorm http://www.jetbrains.com/phpstorm/ • PHP IDE now supports Twig TemplatesThursday, May 12, 2011
  • 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. Last wordsThursday, May 12, 2011
  • 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. Backwards Compatibility breaks are possible, but will be well-documentedThursday, May 12, 2011
  • 75. So dive in!Thursday, May 12, 2011
  • 76. Thanks! Questions? Ryan Weaver @weaverryan Symfony2 Training in Nashville Join us May 19th & 20thThursday, May 12, 2011
  • 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. KnpLabs Quality. Innovation. Excitement. • symfony/Symfony2 development • Consulting & application auditing • Symfony2 TrainingThursday, May 12, 2011
  • 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