Advertisement
Advertisement

More Related Content

Advertisement
Advertisement

eZPublish meets Simfony2 - phpDay2013

  1. eZPublish meets Symfony Gaetano Giunta | phpDay 2013 | 17.5.2013
  2. 5/17/2013gg@ez.no Slide 2 Not your grandpa’s CMS
  3. This is not eZ Publish ANYMORE 5/17/2013gg@ez.no Slide 3 Not your grandpa’s CMS
  4. The drivers
  5. 5/17/2013gg@ez.no Slide 5 Why change? The need to refactor
  6.  Existing codebase is 10 years old   High maintenance cost  Started with no unit tests - singletons everywhere  Layers and roles not properly defined / documented - interdependencies  OOP before php had  Private/protected/static  Closures  Namespaces  Late static binding  And much more  Not built for an AJAX and REST world 5/17/2013gg@ez.no Slide 6 Why change? Everyone loves NEW!
  7.  Existing codebase is 10 years old   Widely deployed  Well debugged  Pitfalls have mostly been uncovered by now  Proven to scale  Well known:  Documentation improved over years  Tutorials, forums, blogs, aggregators  Active community of practitioners  Official training courses 5/17/2013gg@ez.no Slide 7 Why change? Do not forget drawbacks
  8.  Focus on our core business  Experience Management  Content Management  NOT Framework maintenance  Durable Architecture  API stability  Battle tested / not (only) the latest trend  Scalability  Lively Community! 5/17/2013gg@ez.no Slide 8 Picking a framework for a platform rebuild
  9. • Simple Integration with existing API • HMVC (Hierarchical Model View Controller) stack • Decoupled Components • Dependency Injection • Good Template Engine • Extensible, Open, Reliable ;-) 5/17/2013gg@ez.no Slide 9 Prerequisites
  10. • Homebrew • Zeta Components • Zend Framework 2 • Symfony 2 5/17/2013gg@ez.no Slide 10 Candidates
  11. 5/17/2013gg@ez.no Slide 11 And the winner is… Title of presentation is a hint, really...
  12. 5/17/2013gg@ez.no Slide 12 And the winner is…
  13. 5/17/2013gg@ez.no Slide 13 This is eZ Publish 5! Standard Symfony2 App. (=app) +eZ Publish bundles (PHP & REST APIs + Legacy) vendor/ ezsystems/ ezpublish-kernel + Full-blown Back-office
  14. The challenge
  15. Product Management SCRUM Story: «As an existing user, I don’t want to be pissed off by a new #@!$% version!» 5/17/2013gg@ez.no Slide 15 Backwards compatibility (life sucks)
  16. Product Management SCRUM Story: «As an existing user, I don’t want to be pissed off by a new #@!$% version!» • 100% Data Compatible (same DB scheme) • Possibility to include legacy templates in the new ones • Routing fallback • Load legacy content templates with legacy rules • Settings • Access Symfony services from legacy modules 5/17/2013gg@ez.no Slide 16 Backwards compatibility: the objectives
  17. Product Management SCRUM Story: «As an existing user, I don’t want to be pissed off by a new #@!$% version!» • 100% Data Compatible (same DB scheme) • Possibility to include legacy templates in the new ones • Routing fallback • Load legacy content templates with legacy rules • Settings • Access Symfony services from legacy modules 5/17/2013gg@ez.no Slide 17 Backwards compatibility: the objectives
  18. A new architecture
  19. Product Management SCRUM Story: «As an existing user, I don’t want to be pissed off by a new #@!$% version!» • 100% Data Compatible (same DB scheme) • Possibility to include legacy templates in the new ones • Routing fallback • Load legacy content templates with legacy rules • Settings • Access Symfony services from legacy modules Challenge Accepted 5/17/2013gg@ez.no Slide 19 BC: the challenge
  20. 5/17/2013gg@ez.no Slide 20 Dual-core architecture Where the magic is
  21. Legacy version still works perfectly standalone 5/17/2013gg@ez.no Slide 21 BC: icing on the cake
  22. Taming the beast
  23.  New Core: a standard Simfony app  Legacy stack isolated in a dedicated directory 5/17/2013gg@ez.no Slide 23 Refactoring: directory layout
  24. use SymfonyComponentHttpFoundationRequest; require_once __DIR__ . '/../ezpublish/autoload.php'; // set up class autoloading require_once __DIR__ . '/../ezpublish/EzPublishKernel.php'; $kernel = new EzPublishKernel( 'dev', true ); // extends the Sf Kernel class $kernel->loadClassCache(); // a method from parent class $request = Request::createFromGlobals(); $response = $kernel->handle( $request ); $response->send(); $kernel->terminate( $request, $response );  The Kernel class wraps the HTTPKernel  It adds a Service Container  It allows to register bundles via registerBundles() 5/17/2013gg@ez.no Slide 24 The new frontend controller Using Symfony HTTP Kernel
  25.  Sandbox legacy code in a closure  Index.php had to be refactored (from 1100 lines to 20)  Logic moved to a php class  Separated environment setup from execution and teardown  runCallback() sets up the global legacy environment 5/17/2013gg@ez.no Slide 25 Refactoring: bridging Legacy code
  26. The ChainRouter from the Sf CMF project is used 5/17/2013gg@ez.no Slide 26 Routing: seamless integration
  27.  eZ4 had an incomplete REST API  Only functionality available: reading content  Based on Zeta Components MVC component  A new API has been implemented  Full reading and writing of content is possible  All “dictionary” data is also available  Content-type for response can be JSON or XML (with an XSD!)  Fully restful  Usage of all HTTP verbs (and then some: PATCH)  Respect http headers of request (eg: “Accept”)  HATEOAS: use urls as resource ids  No separate request handling framework needed: pure Symfony routing  Bonus points: a client for the REST API, implements the same interfaces exposed by the local PHP API – network transparency!!! 5/17/2013gg@ez.no Slide 27 REST API
  28. An ongoing story
  29. 5/17/2013gg@ez.no Slide 29 Version 5.1 is around the corner
  30. Where to go from here
  31. There’s a few tickets left! Did I tell you it’s on the sea? Want to dive in? 5/17/2013gg@ez.no Slide 31
  32.  Sf2 book – jolly good looking docs: http://symfony.com/doc/current/book/index.html  eZ Publish:  Community: http://share.ez.no  Source code: https://github.com/ezsystems  API docs: http://pubsvn.ez.no/preview.html  Slides soon on Slideshare  Contact me: @gggeek, gaetano.giunta@ez.no THANK YOU 5/17/2013gg@ez.no Slide 32 The usual suspects
  33. 5/17/2013gg@ez.no Slide 33 And now for something completely different
Advertisement