Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Ran Mizrahi - Symfony2 meets Drupal8


Published on

Ran Mizrahi @ Israel's DrupalCamp talking about the upcoming adoption of Symfony2 components in Drupal 8

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Ran Mizrahi - Symfony2 meets Drupal8

  1. 1. For start – let’s think of this simple task!All we would like to do is echo query string param to the screen..// Route: hello?name=world$hello = $_GET[‘name’];printf(‘Hello %s’ , $hello); // Outputs ‘world’ and a warningThink about that!
  2. 2. Symfony2 meets Drupal 8Author: Ran Mizrahi (@ranm8) Open Source Department Leader
  3. 3. About CodeOasis• CodeOasis specializes in advanced web solutions.• Large variety of customers (from startups to retail companies and enterprises)• Two main technology environments: • Open Source – PHP, JS and rich HTML5 and CSS3 client side applications • Microsoft .NET
  4. 4. Drupal is Awesome!!! !?!?!!?• End users - A way to create your own tailored made CMS - It’s great for our end users• Salesmen - Known brand with many major use cases! - It’s great for a salesman
  5. 5. Drupal SUCKS for your’e lookingWell, maybe just if developers!! for a framework
  6. 6. Drupal Started as a CMS and evolved to a CMF!The Problems:• Larger websites are developed using Drupal content management abilities – Lots of code is written.• BIG learning curve for both junior and experienced developers – Learn the “Drupal Way” (Procedural AOP)• Lack of web development drivers/components• Legacy code – Well, like every 11 years old software..
  7. 7. What is Symfony2??"Symfony2 is a reusable set of standalone,decoupled, and cohesive PHP componentsthat solves common web developmentproblems.”Fabian Potencier – Symfony’s project lead
  8. 8. So, why use Syfmony2 in Drupal 8• Symfony2 provides a great set of standalone, independent PHP components that solve common web problems. (HttpFoundation, ClassLoader, EventDispatcher, etc.)• Move to the next generation PHP OOP features that are available from PHP 5.3 and above• The PSR (PHP Standard Recommendation) standard – Allows easy-lazy-class-loader (by not bootstrapping code we don’t need).
  9. 9. Symfony2 Components in Drupal 8
  10. 10. PSR (PHP Recommended Standards)• Set of PHP recommended standards by agreed and embraced by PHP most popular projects (Symfony, Drupal, Zend, CakePHP, Joomla, phpBB, etc.)• Suggested coding standards for: • Naming conventions for autoloading (PSR-0) • Basic coding standards (PSR-1) • Coding style guide (PSR-2)
  11. 11. ClassLoader• ClassLoader loads your project classes automatically if they follow the PSR-0 standard naming convention• One universal class autoloader that follows PHP known standards• Lazy-loading-class-loader
  12. 12. ClassLoaderExamplerequire_once __DIR__ . ’/ClassLoader/UniversalClassLoader.php;use SymfonyComponentClassLoaderUniversalClassLoader;$loader = new UniversalClassLoader();$loader->register();// Now we can register some namespaces…$loader->registerNamespace(‘Symfony’, __DIR__ . ‘/src’);
  13. 13. HttpFoundation• HttpFoundation wraps HTTP specification (PHP super globals - $_GET, $_SESSION, $_POST, $_COOKIE, $_FILE, etc. for request and echo, header, setcookie, etc. for response) with OO layer• It provides abstraction for HTTP requests, responses, cookies, session, uploaded files, etc.
  14. 14. HttpFoundationLet’s start with a simple task:// Route: hello?name=world$hello = $_GET[‘name’];printf(‘Hello %s’ , $hello); // Outputs ‘world’ and a warningIt turns out to be not that simple, now we’ve got PHP warning:// Route: hello?name=world$hello = isset($_GET[‘name’]) ? $_GET[‘name’] : ‘World’;printf(‘Hello %s’ , $hello); // Outputs ‘world’OK, what now?! Yes, we have XSS issue )-: Let’s fix…
  15. 15. HttpFoundation// Route: hello?name=world$hello = isset($_GET[‘name’]) ? $_GET[‘name’] : ‘World’;printf(‘Hello %s’ , htmlspecialchars($hello, END_QUOTES, ‘UTF-8’));// Outputs ‘world’Hard job for a simple task and makes our code look… UGLY!
  16. 16. HttpFoundationThis is how our code will look like using HttpFoundation:// /hello?name=worlduse SymfonyComponentHttpFoundationRequest;use SymfonyComponentHttpFoundationResponse;$request = Request::createFromGlobals();echo ‘Hello’ . $request->query->get(‘name’ , ‘World’); // Outputs ‘world’And it’s great for unit testing (-:class HelloTest extends PHPUnit_Framework_TestCase { public function testHello() { $request = Request::create(/?name=world, GET); $helloClass = new Hello(); $content = $helloClass->sayHello(); $this->assertsEquals(’Hello world’, $content); }}
  17. 17. EventDispatcher• The EventDispatcher is lightweight implementation of the Observer design pattern• Provides the ability to dispatch and listen to events.use SymfonyComponentEventDispatcherEventDispatcher;use SymfonyComponentEventDispatcherEvent;$dispatcher = new EventDispatcher();$dispatcher->addListener(‘new_node’ , function(Event $event) { // React to the event});$dispatcher->dispatch(‘new_node’);
  18. 18. EventDispatcherSo how will it fit in Drupal (Larry Garfield’s prediction )• Drupal 8 will have both hooks and EventDispatcher• EventDispatcher will be closer to the core, hooks further out• Drupal 9, maybe only event dispatcher ?!? I hope so (-:
  19. 19. Templates - Twig (Maybe?)What is Twig?• Twig is a template engine for PHP• Uses it’s own template syntax, originally inspired from Jinja and Django (According to Wikipedia)• Symfony2 uses Twig as main template engine• Twig was written by Fabian Potencier
  20. 20. Templates - Twig (Maybe?)PHPTemplate:<div> <?php if ($content): ?> <span><?php echo $content; ?></span> <span><?php echo htmlspecialchars($content, ENT_QUOTES, ‘UTF-8’); ?></span> <?php endif; ?></div>Twig:<div> {% if content %} <span>{{ content }}</span> <span>{{ content|escape }}</span> {% endif %}</div>
  21. 21. Templates - Twig (Maybe?)Why Twig is good for us:• Secure• Front-end developer friendly (No PHP knowledge is required• Not Drupal-proprietary.• Great way to make sure that logics won’t find a place on Drupal templates (-:
  22. 22. Contact me @ranm8 on twitterMail :