Your SlideShare is downloading. ×
  • Like
Symfony2
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply
Published

- Eckdaten des Frameworks …

- 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

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
2,876
On SlideShare
0
From Embeds
0
Number of Embeds
4

Actions

Shares
Downloads
27
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Symfony2Paul Seiffert I 03.03.2011 © Mayflower GmbH 2010
  • 2. EckdatenAusgewachsenes PHP-FrameworkKomplette Neuentwicklung~ 755 PHP-Klassen in 975 .php-Dateien Mayflower GmbH I 2
  • 3. Architektur und Internals12.03.11 Mayflower GmbH 3 Bild: http://www.flickr.com/photos/army_arch/3343321507/sizes/z/in/photostream/
  • 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 KernelSammlung 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 EventDispatcherEin „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 DependencyInjectionContainerI 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
  • 9. Beispiel-Konfiguration von Doctrine doctrine: dbal: dbname: xxxxxxxx user: xxxxxxxx password: ~ logging: %kernel.debug% orm: auto_generate_proxy_classes: %kernel.debug% mappings: HelloBundle: ~ Mayflower GmbH I 9
  • 10. Internals (III) – Der HttpKernelI Aufgabe des HttpKernels: Transformation von Requests in ResponsesI Zwei Abhängigkeiten: ControllerResolver und EventDispatcherI Erweiterung des Transformationsprozesses mittels Event-Listener möglich Request HTTP-Kernel Response Mayflower GmbH I 10
  • 11. Praxis12.03.11 Mayflower GmbH 11 Bild: http://www.flickr.com/photos/reway2007/2927363741/lightbox/
  • 12. Projektstruktur (I) Application- Configuration und Logs/Cache FrontController und Ressources Eigene BundlesThird-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
  • 17. app/views/base.html.twigLayout: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>{% block title %}Hello Application{% endblock %}</title> </head> <body> {% block body %}{% endblock %} </body> </html>Bundle- src/Paul/HelloBundle/Resources/views/layout.html.twig {% extends "::base.html.twig" %}Template: {% block body %} <h1>Hello Bundle</h1> {% block content %}{% endblock %} {% endblock %}Action- src/Paul/HelloBundle/Resources/views/Hello/index.html.twig {% extends "HelloBundle::layout.html.twig" %}Template: {% block content %} Hello {{ name }}!<br /><br /> <img src="{{ asset(images/katzenbank.png) }}" /><br /> <a href="{{ path(hello, { name: Thomas }) }}">Greet Thomas! </a> {% endblock %} Mayflower GmbH I 17
  • 18. ? Mayflower GmbH I 18
  • 19. Demo Mayflower GmbH I 19
  • 20. Vielen Dank für Ihre Aufmerksamkeit! Kontakt Paul Seiffert Paul.Seiffert@mayflower.de +49 89 242054 1172 Mayflower GmbH Mannhardtstrasse 6 80538 München12.03.11 Mayflower GmbH 20