• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Ran Mizrahi - Symfony2 meets Drupal8
 

Ran Mizrahi - Symfony2 meets Drupal8

on

  • 1,913 views

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

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

Statistics

Views

Total Views
1,913
Views on SlideShare
741
Embed Views
1,172

Actions

Likes
0
Downloads
1
Comments
0

14 Embeds 1,172

http://blog.codeoasis.com 752
http://www.natures1.com 145
http://www.naturescent365.com 142
http://natures1.com 81
http://naturescent365.com 16
http://www.ramid.linux.codeoasis.com 12
http://www.linkedin.com 9
http://translate.googleusercontent.com 4
http://elite.linux.codeoasis.com 4
http://local.blog.codeoasis.com 2
http://www.365dailyjournal.com 2
http://blog-stage.codeoasis.com 1
http://194.90.176.73 1
http://cancanit.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Ran Mizrahi - Symfony2 meets Drupal8 Ran Mizrahi - Symfony2 meets Drupal8 Presentation Transcript

    • 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!
    • Symfony2 meets Drupal 8Author: Ran Mizrahi (@ranm8) Open Source Department Leader
    • 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
    • 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
    • Drupal SUCKS for your’e lookingWell, maybe just if developers!! for a framework
    • 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..
    • 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
    • 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).
    • Symfony2 Components in Drupal 8
    • 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)
    • 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
    • ClassLoaderExamplerequire_once __DIR__ . ’/ClassLoader/UniversalClassLoader.php;use SymfonyComponentClassLoaderUniversalClassLoader;$loader = new UniversalClassLoader();$loader->register();// Now we can register some namespaces…$loader->registerNamespace(‘Symfony’, __DIR__ . ‘/src’);
    • 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.
    • 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…
    • 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!
    • 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); }}
    • 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’);
    • 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 (-:
    • 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
    • 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>
    • 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 (-:
    • Contact me @ranm8 on twitterMail : ranm@codeoasis.com