- Eckdaten des Frameworks
- Architektur & Internals
- Mikrokernel und Architektur des Frameworks
- Architektur des Frameworks mit eigenen Bundles
- Überblick Kernel-Komponenten
- Der EventDispatcher
- Der DependencyInjectionContainer
- Beispiel-Konfigurationdes des DICs
- Der HttpKernel
- Projektstruktur - apps-, web-, src- und vendor-Verzeichnis
- Beispiel-FrontController
- Beispiel-AppKernel
- Beispiel-Controller-Klasse
- Die Templating-Engine Twig
- Beispiel Layout/Templates
- Demo
4. Architektur (I)
I Basis: Überschaubarer Microkernel (Symfony Components)
I „Everything else is a bundle“
MVC Doctrine Twig Security
Kernel
Mayflower GmbH I 4
5. Architektur (II)
Application Third-Party
Bundles Shop Blog User Bundles
MVC Doctrine Twig Security
Kernel
Mayflower GmbH I 5
6. Architektur (III) – Der Kernel
Sammlung von Komponenten:
I Abstraktion über PHP-Funktionen / System Calls
Finder Serializer Process Validator
I Objekt-Orientierte Schnittstelle zu HTTP
HttpFoundation BrowserKit
I Schlüsselfunktionalitäten im Zusammenspiel des Frameworks
EventDispatcher HttpKernel DependencyInjection
Mayflower GmbH I 6
7. Internals (I) – Der EventDispatcher
Ein „globales Observer-Pattern“:
connect('XY', array($this, 'callback'))
Listener
1) Please tell me if XY happens!
3) Subject XYed with Z
EventDispatcher
callback($event)
2) Hey, I just XYed with Z!
Subject notify(new EventXY(Z))
Mayflower GmbH I 7
8. Internals (II) – Der DependencyInjectionContainer
I Ziel: Keine konkreten Abhängigkeiten, d.h. keine direkte
Instanziierung von Services mehr!
$myDependency = new Services();
$container->getService();
Zur Compile-Zeit: Dependency-Graph
Zur Laufzeit: Service-Pool
Mayflower GmbH I 8
10. Internals (III) – Der HttpKernel
I Aufgabe des HttpKernels:
Transformation von Requests in Responses
I Zwei Abhängigkeiten: ControllerResolver und
EventDispatcher
I Erweiterung des Transformationsprozesses mittels Event-Listener
möglich
Request
HTTP-Kernel
Response
Mayflower GmbH I 10
12. Projektstruktur (I)
Application-
Configuration und
Logs/Cache
FrontController
und Ressources
Eigene
Bundles
Third-Party Bundles
Mayflower GmbH I 12
13. Projektstruktur (II)
<?php
require_once __DIR__.'/../app/bootstrap_cache.php';
require_once __DIR__.'/../app/AppCache.php';
use SymfonyComponentHttpFoundationRequest;
$kernel = new AppKernel('prod', false);
$kernel>handle(Request::createFromGlobals())>send();
Mayflower GmbH I 13
14. Projektstruktur (II)
<?php
use SymfonyComponentHttpKernelKernel;
use SymfonyComponentConfigLoaderLoaderInterface;
class AppKernel extends Kernel
{
public function registerBundles()
{
$bundles = array(
new SymfonyBundleFrameworkBundleFrameworkBundle(),
new SymfonyBundleTwigBundleTwigBundle(),
new SymfonyBundleZendBundleZendBundle(),
new SymfonyBundleDoctrineBundleDoctrineBundle(),
new PaulHelloBundleHelloBundle(),
);
if (in_array($this>getEnvironment(), array('dev', 'test'))) {
$bundles[] = new SymfonyBundleWebProfilerBundleWebProfilerBundle();
}
return $bundles;
}
public function registerRootDir()
{
return __DIR__;
}
public function registerContainerConfiguration(LoaderInterface $loader)
{
$loader>load(__DIR__.'/config/config_'.$this>getEnvironment().'.yml');
}
}
Mayflower GmbH I 14
15. Projektstruktur (II)
<?php
namespace PaulHelloBundleController;
use SymfonyBundleFrameworkBundleControllerController;
class HelloController extends Controller
{
public function indexAction($name)
{
return $this>render(
'HelloBundle:Hello:index.html.twig',
array('name' => $name));
}
}
Mayflower GmbH I 15
16. Twig (Templating Engine)
I Sowohl als Standalone-Engine als auch als Bestandteil des
Symfony-Frameworks verwendbar
(http://www.twig-project.org/)
I First-Class citizens: Templates und Blöcke
· Base-Template: „Layout“
· Bundle-Templates erweitern das Layout
· Action-Templates erweitern Bundle-Templates
· …
Mayflower GmbH I 16
20. Vielen Dank für Ihre Aufmerksamkeit!
Kontakt Paul Seiffert
Paul.Seiffert@mayflower.de
+49 89 242054 1172
Mayflower GmbH
Mannhardtstrasse 6
80538 München
12.03.11 Mayflower GmbH 20