James Wilson

Web developer. Drupal enthusiast. Surfer and musician. I craft bespoke websites at Bluespark.

Drupal on Symphony2

Some symphony components will come preinstalled in Drupal 8.

ClassLoader

Component that loads files where classes are defined only when needed.

http://symfony.com/PSR0

HttpFoundation

HTTP/1.1 (RFC 2616) PLEASE READ THIS.

http://www.ietf.org/rfc/rfc2616.txt http://tools.ietf.org/wg/httpbis

REQUESTS:

Normally, in php to get HTTP info, you need to use the $_GET and $_SESSION and $_SERVER super globals.

This goes wrong, if there are reverse proxies and other things (e.g. for HTTPCLIENTIP doesn't work behind a proxy. The FORWARDED_FOR variable is not always trustworthy. A lot of work just to get a reasonable client IP address.

Not object-oriented, singleton like, lot of low level work to do.

$request = Request::createFromGlobals();
$request = Request::create('/hello.html', 'GET');

RESPONSE:

Plain php:

header()
setcookies()
$_SESSION()
echo '…';

Doesn't play well with CLI. Singleton like Low-level abstraction only. Not Object-Oriented.

Symfony:

$resonse = new REspponse('Not Found', 404).
new StreamedResponse()

$response->prepare($request);

Session Management flash messages.

Routing

Matching incoming requests, to know which code (controller) should handle the request.

$route = new Route('node/{id}', array('_controller' => 'SomeClass:someMethod'));

$routes = new RouteCollection();
$routes->add(…

Symfony can also generate the urls.

$generator = new UrlGeneratior($routes, $context);
echo $generator->generate('node', array('id' => 12));

EventDispatcher

Implements a lightweight of the observer design pattern.

Like hook system.

$dispatcher  = new EventDispatcher()

callable = function (Event $event) {
     // do somethingin
};

$dispather->addListener('event_name', $callable);

HttpKernel

standard way to handle requests and ensure request gets sent back to browser.

interface HttpKernelInterface {
     function handle(Request $request, $type = self::MASTER_REquest, $catch) {}
}

interface ControllerResolverInterface {
     function getController(Request $r)
     function getArguments(Request $r, $controller)
}

HTTP Ccaching.

Symfony relies on http caching headers.

Experiation (Cache-Control, Expires header)

Validation: Last-Modified, If-Modified-Since, ETag.

$response->setTtl(10);
$response->setClientTtl(10);