Symfony2Paul Seiffert I 03.03.2011                             © Mayflower GmbH 2010
EckdatenAusgewachsenes PHP-FrameworkKomplette Neuentwicklung~ 755 PHP-Klassen in 975 .php-Dateien                         ...
Architektur und Internals12.03.11                          Mayflower GmbH                                                 ...
Architektur (I)I Basis: Überschaubarer Microkernel (Symfony Components)I „Everything else is a bundle“              MVC   ...
Architektur (II)Application                                           Third-Party   Bundles      Shop    Blog             ...
Architektur (III) – Der KernelSammlung von Komponenten: I Abstraktion über PHP-Funktionen / System Calls         Finder   ...
Internals (I) – Der EventDispatcherEin „globales Observer-Pattern“:                       connect(XY, array($this, callbac...
Internals (II) – Der DependencyInjectionContainerI Ziel: Keine konkreten Abhängigkeiten, d.h. keine direkte  Instanziierun...
Beispiel-Konfiguration von Doctrine doctrine:    dbal:        dbname:   xxxxxxxx        user:     xxxxxxxx        password...
Internals (III) – Der HttpKernelI Aufgabe des HttpKernels:  Transformation von Requests in ResponsesI Zwei Abhängigkeiten:...
Praxis12.03.11      Mayflower GmbH                                                 11                   Bild: http://www.f...
Projektstruktur (I)          Application-     Configuration und          Logs/Cache        FrontController        und Ress...
Projektstruktur (II)                       <?php                       require_once __DIR__./../app/bootstrap_cache.php;  ...
Projektstruktur (II)                   <?php                   use SymfonyComponentHttpKernelKernel;                   use...
Projektstruktur (II)                       <?php                       namespace PaulHelloBundleController;               ...
Twig (Templating Engine)I Sowohl als Standalone-Engine als auch als Bestandteil des  Symfony-Frameworks verwendbar (http:/...
app/views/base.html.twigLayout:     <!DOCTYPE html>            <html>                <head>                    <meta http-...
?    Mayflower GmbH I 18
Demo       Mayflower GmbH I 19
Vielen Dank für Ihre Aufmerksamkeit!      Kontakt   Paul Seiffert                Paul.Seiffert@mayflower.de               ...
Upcoming SlideShare
Loading in...5
×

Symfony2

3,021

Published on

- 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
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
3,021
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
28
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Symfony2

  1. 1. Symfony2Paul Seiffert I 03.03.2011 © Mayflower GmbH 2010
  2. 2. EckdatenAusgewachsenes PHP-FrameworkKomplette Neuentwicklung~ 755 PHP-Klassen in 975 .php-Dateien Mayflower GmbH I 2
  3. 3. Architektur und Internals12.03.11 Mayflower GmbH 3 Bild: http://www.flickr.com/photos/army_arch/3343321507/sizes/z/in/photostream/
  4. 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. 5. Architektur (II)Application Third-Party Bundles Shop Blog User Bundles MVC Doctrine Twig Security Kernel Mayflower GmbH I 5
  6. 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. 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. 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. 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. 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. 11. Praxis12.03.11 Mayflower GmbH 11 Bild: http://www.flickr.com/photos/reway2007/2927363741/lightbox/
  12. 12. Projektstruktur (I) Application- Configuration und Logs/Cache FrontController und Ressources Eigene BundlesThird-Party Bundles Mayflower GmbH I 12
  13. 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. 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. 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. 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. 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. 18. ? Mayflower GmbH I 18
  19. 19. Demo Mayflower GmbH I 19
  20. 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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×