Henrik Akselsen Jobber i Frontkom Jobbet med Drupal i 1,5 år Drupal.org: 410273



Henrik Akselsen Jobber i Frontkom Jobbet med Drupal i 1,5 år Drupal.org: 410273

0 0


symfony_drupal


On Github henrikakselsen / symfony_drupal

<----

  • Henrik Akselsen
  • Jobber i Frontkom
  • Jobbet med Drupal i 1,5 år
  • Drupal.org: 410273

PHP

  • Brukes av 78% av alle websider der serverspråket er kjent
  • Kanskje det mest utskjelte av alle programmeringsspråk
  • (Bortsett fra C++)
The great crime of PHP is its utter banality. Its continued propularity (sic) is living proof that quality is irrelevant; cheap and popular and everywhere always wins. PHP is the Nickelback of programming languages.

- Jeff Atwood

As it has evolved into an increasingly powerful system, Drupal has gotten increasingly complex and is not as easy to start developing with as it once was. Many developers are nervous about continuing that trend.

- Dries, 16 feb 2012

Symfony+Drupal
It has not always been the case, but the last 5 years have been an amazing journey for PHP.

Fabien Potencier, Symfony2 hovedutvikler

Drupal 8

Core initiatives

  • Configuration Management
  • HTML5
  • Layouts
  • Mobile
  • Multilingual
  • Views in Core
  • Web Services
  • Hjelp til

Drupal 8

Core initiatives

  • Lar Dries Skalere
  • Slipper 10000 pågående samtaler selv
  • Dries koordinerer initiativeierne, eierne koordinere initiativene

MVC

  • Ansvarsdeling
  • Kodere kan holde på med modeller + kontrollere
  • Designere kan holde på med Views
  • Ruby on Rails, Express, Django

Drupal 7 som "MVC"

Model: Database (MySQL) Views: Templates (tpl.php) Controller: "Alt annet"

Drupal 8 som 'MVC'

  • Model: ingen store endringer
  • Views: Twig
  • Controller: Mange elementer fra Symfony

Er ikke phptemplate bra nok lizm?

  • Templatesystem: Separere Presentasjon fra logikk
  • PHP som templatespråk gir for mye kraft til presentasjonslaget
  • Resultat: Messy og usikker kode
We hand themers a loaded gun and tell them to hammer in a nail with it. Oh, and be careful

John Albin (Drupalcon, Denver)

< ?php echo $var ?>
{{ var }}
					
	< ?php 
	echo htmlspecialchars($var, ENT_QUOTES, 'UTF-8') 
	?>

					
{{ var|escape }}

Symfony

  • En mengde moduler for PHP som gjør mange oppgaver lettere og sikrere
  • Sammen utgjør alle modulene et komplett rammeverk for å utvikle sider i PHP
  • Drupal 8 adopsjon er en stor seier for Symfony
  • Sunshine PHP vil ha et eget spor med kun symfony
  • Første stabile release tidlig 2013

Symfony

  • Request/Response, snarere enn MVC
  • Objektorientert
    • Request-objekt
    • Response-objekt
  • Vil håndtere svært mye av lav-nivå funksjonalitet i Drupal 8
  • Inkludert og integrert - ikke egen installasjon

Classloader

HttpFoundation

  • Definerer et objekt-orienter lag over HTTP specification.
  • request/response
  • prepare() - sørger for at responsen følger http spec
  • session management
  • 'Erstatter' Globale variabler
    • clientIP = $_SERVER['REMOTE_ADDR']
  • Mer her

Routing

  • Skille utseendet på en URL fra håndteringen
  • Mapper en HTTP request til et sett med konfigurasjonsvariabler.
  • Mer her

EventDispatcher

  • Symfonys hook system
  • Observer Pattern
  • Vil ikke erstatte hooksystemet fullstendig i denne omgang
  • vs hooks:
    • objektorientert
    • testbart
    • selvforklarende
    • mulig å kjøre flere
    • Listeners i motsetning til function_exists
  • Mer her

DependcyInjector

  • The Dependency Injection component allows you to standardize and centralize the way objects are constructed in your application.
  • Array av objekter (på steroider)
  • Mer her

HttpKernel

  • Den dynamiske delen av HTTTP spesifikasjonen
  • En tynn wrapper over request/response
  • Har som 'mål' å konvertere et requestobjekt til Responseobjekt
  • handle() tar en Request returnerer en Response.
  • Mer her

HTTP Testing

  • Integrer med PHPUnit
  • Unit tester og funksjonelle tester
  • $crawler = $client->request('GET', '/demo/hello/world');
  • $this->assertEquals(42, $result);
  • Mer her

Caching

  • Ikke caching på applikasjonsnivå, forholder seg til http-spesifikasjonen
  • Cache-Control Expires ($response->setClientTtl)
  • Validation
  • Expiration + validation
  • Mål: Aldri lage den samme responsen 2 ganger
  • ESI - Edge Side includes
    • Ikke cache hele siden
  • Mer her

Ressurser

  • Færre drupalismer
  • Unngå NIH
  • Lettere å samarbeide med andre siter

Ferdig