Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Extbase und Fluid Einführung

ipf
November 21, 2012

Extbase und Fluid Einführung

Eine Einführung in Extbase und Fluid mit einer kleinen Demo Extension unter https://github.com/ipf/substaff
Vorgetragen im Rahmen der TYPO3 Tagung am RRZN Hannover

ipf

November 21, 2012
Tweet

More Decks by ipf

Other Decks in Programming

Transcript

  1. $ WHOAMI INGO PFENNIGSTORF > 30 Jahre alt Medieninformatiker Webentwickler

    SUB Göttingen Focus auf TYPO3 Extbase Entwicklung seit 2010 Mitglied im TYPO3 Extbase Team XING
  2. EXTBASE Extbase ist ein / Framework für TYPO3 Extensions und

    ursprünglich ein Backport von TYPO3 Flow (formerly known as FLOW3). MVC DDD
  3. MVC - MODEL / VIEW / CONTROLLER Trennung von Datenmodell

    (Model) Präsentation (View, Templates) Steuerung (Controller)
  4. DDD - DOMAIN DRIVEN DESIGN “Domain-Driven Design is a development

    technique which focuses on understanding the customer’s problem domain. It not only contains a set of technical ideas, but it also consists of techniques to structure the creativity in the development process.” DDD im TYPO3 Flow Kontext
  5. DDD - DOMAIN DRIVEN DESIGN “Domain-Driven Design is a development

    technique which focuses on understanding the customer’s problem domain. It not only contains a set of technical ideas, but it also consists of techniques to structure the creativity in the development process.” DDD im TYPO3 Flow Kontext
  6. CONVENTION OVER CONFIGURATION DATENBANKEN Datenbanktabellen basieren auf den Models und

    andersherum Model Mitarbeiter => Tabelle tx_extensionname_domain_model_mitarbeiter Datenbankfelder werden als Modelpropertys im lowerCamelCase abgebildet Feld email_adresse wird im Model als Property emailAdresse gemappt
  7. MODELS Definieren ein Domain Object (Person, Auto, Uni) Hat Eigenschaften

    (Properties) Properties haben getter / setter Bilden Datenbankschema ab
  8. MODELS c l a s s T x _ E

    x t e n s i o n N a m e _ D o m a i n _ M o d e l _ P e r s o n e x t e n d s T x _ E x t b a s e _ D o m a i n O b j e c t _ A b s t r a c t E n t i t y { p r o t e c t e d $ n a m e ; p r o t e c t e d $ e m a i l A d d r e s s ; p u b l i c f u n c t i o n g e t N a m e ( ) { r e t u r n $ t h i s - > n a m e ; } p u b l i c f u n c t i o n s e t N a m e ( $ n a m e ) { $ t h i s - > n a m e = $ n a m e ; } } [ . . . ]
  9. ACTION CONTROLLER Hauptbestandteil eines Controllers sind Actions Eine Action definiert

    eine Ansicht Controller Mitarbeiter mit Actions list und show
  10. ZUSAMMENSPIEL ACTIONCONTROLLER UND VIEW (FLUID) $ v a r i

    a b l e N a m e = " H a l l o T Y P O 3 C M S " $ t h i s - > v i e w - > a s s i g n ( ' v a r i a b l e N a m e ' , $ v a r i a b l e N a m e ) ;
  11. REPOSITORY - INTERAKTION MIT DER DATENBANK Zuständig für das CRUD

    in der Datenbank Vordefinierte Methoden zur Interaktion Eigene Abfragen können definiert werden
  12. REPOSITORY - METHODEN findAll() findByProperty() - z.B. findByTitel() (Magie) update($object)

    - z.B. update($mitarbeiter) remove($object) - z.B. remove($mitarbeiter) countAll() ...
  13. TYPOSCRIPT p l u g i n . t x

    _ s u b s t a f f { p e r s i s t e n c e { s t o r a g e P i d = { $ p l u g i n . t x _ s u b s t a f f . p e r s i s t e n c e . s t o r a g e P i d } } v i e w { t e m p l a t e R o o t P a t h = [ . . . ] p a r t i a l R o o t P a t h = [ . . . ] l a y o u t R o o t P a t h = { $ p l u g i n . t x _ s u b s t a f f . v i e w . l a y o u t R o o t P a t h } d e f a u l t P i d = a u t o } f e a t u r e s { s k i p D e f a u l t A r g u m e n t s = 1 } }
  14. FRONTEND PLUGIN REGISTRIEREN Eintrag in ext_localconf.php T x _ E

    x t b a s e _ U t i l i t y _ E x t e n s i o n : : c o n f i g u r e P l u g i n ( $ _ E X T K E Y , ' P l u g i n N a m e ' , a r r a y ( ' C o n t r o l l e r N a m e ' = > ' c o n t r o l l e r A c t i o n ' , ) ) ;
  15. PLUGIN IM BACKEND REGISTRIEREN Eintrag in ext_tables.php T x _

    E x t b a s e _ U t i l i t y _ E x t e n s i o n : : r e g i s t e r P l u g i n ( $ _ E X T K E Y , ' P l u g i n N a m e ' , ' P l u g i n T i t e l ' ) ;
  16. EXTBASE ORDNERSTRUKTUR C l a s s e s C

    o n t r o l l e r T x _ E x t e n s i o n N a m e _ C o n t r o l l e r _ M o d e l N a m e C o n t r o l l e r D o m a i n M o d e l T x _ E x t e n s i o n N a m e _ D o m a i n _ M o d e l _ M o d e l N a m e R e p o s i t o r y T x _ E x t e n s i o n N a m e _ D o m a i n _ R e p o s i t o r y _ M o d e l N a m e R e p o s i t o r y C o n f i g u r a t i o n T y p o S c r i p t T c a R e s o u r c e s P r i v a t e T e m p l a t e s C o n t r o l l e r n a m e A c t i o n N a m e . h t m l P u b l i c T e s t s U n i t
  17. FLUID Template Engine Entwickelt für TYPO3 Flow Backport von TYPO3

    Flow für TYPO3 CMS HTML Dateien mit Fluidspezifischen Tags ViewHelper Widgets
  18. TAGS < u l > < f : f o

    r e a c h = " { e m p l o y e e s } " a s = " e m p l o y e e " > < l i > { e m p l o y e e . n a m e } < / l i > < / f : f o r > < u l >
  19. VIEWHELPER - ITERATIONEN < f : f o r e

    a c h = " { a b t e i l u n g e n } " a s = " a b t e i l u n g " > { a b t e i l u n g . t i t e l } < / f : f o r >
  20. VIEWHELPER - CONDITIONS < f : i f c o

    n d i t i o n = " { m i t a r b e i t e r . a b t e i l u n g } " > { a b t e i l u n g . t i t e l } < / f : i f >
  21. VIEWHELPER - FORMAT < f : f o r m

    a t . d a t e . . . / > < f : f o r m a t . c r o p . . . / >
  22. AUFGABE Auf der Website der Uni sollen alle Mitarbeiter und

    deren Abteilungen dargestellt werden. Mitarbeiter haben einen Namen, eine E-Mail Adresse und gehören einer Abteilung an. Eine Abteilung hat einen Namen.
  23. DOMÄNEN Aus den Domänen werden die Models gebildet ABTEILUNG Properties:

    Name MITARBEITER Properties: Name E-Mail Adresse Abteilung
  24. MODEL: ABTEILUNG < ? p h p c l a

    s s T x _ S u b s t a f f _ D o m a i n _ M o d e l _ A b t e i l u n g e x t e n d s T x _ E x t b a s e _ D o m a i n O b j e c t _ A b s t r a c t E n t i t y { / * * * @ v a r s t r i n g * / p r o t e c t e d $ t i t e l ; / * * * @ r e t u r n s t r i n g $ t i t e l * / p u b l i c f u n c t i o n s e t T i t e l ( $ t i t e l ) { $ t h i s - > t i t e l = $ t i t e l ; } / * * * @ v a r @ r e t u r n s t r i n g * / p u b l i c f u n c t i o n g e t T i t e l ( ) { r e t u r n $ t h i s - > t i t e l ; } ? >
  25. MODEL: MITARBEITER < ? p h p > c l

    a s s T x _ S u b s t a f f _ D o m a i n _ M o d e l _ M i t a r b e i t e r e x t e n d s T x _ E x t b a s e _ D o m a i n O b j e c t _ A b s t r a c t E n t i t y { / * * * @ v a r s t r i n g * / p r o t e c t e d $ n a m e ; / * * * @ v a r s t r i n g * / p r o t e c t e d $ e m a i l A d r e s s e ; / * * * @ v a r T x _ E x t b a s e _ P e r s i s t e n c e _ O b j e c t S t o r a g e < T x _ S u b s t a f f _ D o m a i n _ M o d e l _ A b t e i l u n g > * / p r o t e c t e d $ a b t e i l u n g ; p u b l i c f u n c t i o n _ _ c o n s t r u c t ( ) { $ t h i s - > i n i t i a l i z e S t o r a g e O b j e c t s ( ) ; } p r o t e c t e d f u n c t i o n i n i t i a l i z e S t o r a g e O b j e c t s ( ) { $ t h i s - > a b t e i l u n g = n e w T x _ E x t b a s e _ P e r s i s t e n c e _ O b j e c t S t o r a g e ( ) ;
  26. REPOSITORY: ABTEILUNGEN < ? p h p > c l

    a s s T x _ S u b s t a f f _ D o m a i n _ R e p o s i t o r y _ A b t e i l u n g R e p o s i t o r y e x t e n d s T x _ E x t b a s e _ P e r s i s t e n c e _ R e p o s i t o r y { } ? >
  27. REPOSITORY: MITARBEITER < ? p h p > c l

    a s s T x _ S u b s t a f f _ D o m a i n _ R e p o s i t o r y _ M i t a r b e i t e r R e p o s i t o r y e x t e n d s T x _ E x t b a s e _ P e r s i s t e n c e _ R e p o s i t o r y { } ? >
  28. ANLAGE TEMPLATE Fluid Templates sind HTML Dateien Templates liegen in

    Resources/Private/Templates/ControllerName/ Jedes Controller Action hat in der Regel ein eigenes Template ActionName.html Action listAction des Controllers Mitarbeiter?
  29. VIEWHELPER - E-MAIL ADRESSE VERLINKEN < f : l i

    n k . e m a i l e m a i l = " { m i t a r b e i t e r . e m a i l } " > { m i t a r b e i t e r . n a m e } < / f : l i n k . e m a i l >
  30. WEITERE HINWEISE Die Demo Extension wurde mit Extbase Features von

    TYPO3 4.7 erstellt. Einige Features sind noch nicht in TYPO3 4.5 oder 4.6 enthalten. Die Benamung der Klassen ist mit TYPO3 6.0 deprecated und wird durch eine Kompatibilitätsschicht noch funktionieren Die Demo-Extension ist verfügbar bei und im Github TER
  31. LINKS Extbase Projektseite im TYPO3 Extbase / Fluid eBook von

    (2010) von Patrick Lobacher Forge Mittwald Extbase / Fluid CheatSheet