Clio online flow undervisning

706 views

Published on

[Danish] Undervisningsmateriale til TYPO3 Flow kursus afholdt for Clio online

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
706
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Clio online flow undervisning

  1. 1. TYPO3 FLOW Hands-on undervisning af Clio online 7,8 oktober 2013
  2. 2. Agenda • Underliggende teknologier • Hands on: Start nyt flow projekt - Installation af Flow • Generelt om OOP • Domain driven design og MVC og alt det andet Buzz • Flere hands-on øvelser
  3. 3. Underliggende teknologier • Composer • Doctrine • Yaml • Symphony • PSR0 - Namespaces, autoloading
  4. 4. Composer • http://getcomposer.org/ • PHP Dependency manager • Inspireret af npm (nodejs) bundler (ruby) etc. • Installerer “pakker” lokalt. Dvs. ingen deling globalt. curl -sS https://getcomposer.org/installer | php php composer.phar help
  5. 5. composer.json { "name": "clio/clio-base-distribution", "description" : "Clio Flow Base Distribution", "require": { "typo3/flow": "2.0.*" }, }
  6. 6. Packagist.org
  7. 7. Composer install workflow composer create-project Hent manifest Udregn afhængigheder Hent manifest Klon fra versionsstyring Git clone }
  8. 8. PHP Namespaces Alle navne i denne fil, er nu inde i namespacet ClioBeerController Den fulde “path” er altså ClioBeerControllerBeerController Når jeg skriver Flow mener jeg i virkeligheden TYPO3FlowAnnotations Når jeg skriver Debugger, mener jeg altså den her Debugger TYPO3FlowErrorDebugger
  9. 9. Doctrine • Flow bruger Doctrine2 som ORM (Object Relational Mapper) til persistering • Bruger UUID som unikke record ID • Opdateret databaseskema ud fra PHP kode • Automatisk foreign-key i databasen for øget databasekonsistens • Heavy brug af annoteringer! (Ligesom alt andet i Flow)
  10. 10. Eksempel
  11. 11. Eksempel
  12. 12. Ren Doctrine
  13. 13. Doctrine2 i Flow
  14. 14. Yaml •Yaml Aint’t Markup Language •Var: Yet Another Markup Language •Generelt brugt til alt konfiguration i Flow Spaces
  15. 15. Symphony • Hvorfor bruge et andet Framework til at bygge Flow? • Udvalgte pakker • Yaml parser (symfony/yaml) • dom-crawler (symfony/dom-crawler) • console (symfony/console) • Ingen grund til at genopfinde den dybe tallerken
  16. 16. PSR-0 og Autoload • Defineret af PHP Framework Interoperatability Group • PSR0 Definerer autoload og navngivning • Et fuldt klassenavn skal have denne struktur: VendorNamespaceClassname • Et namespace skal have et top-level “Vendor”-prefix samt vilkårligt antal “under”-namespaces
  17. 17. PSR • PSR1: Basic coding standard • https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-1- basic-coding-standard.md • “Best” eller “Good” practice (En fil, én klasse, UTF8, UppperCamelCase etc) • PSR2: Codestyle standard • https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2- coding-style-guide.md • Relativ kontroversiel standard. (Tabs vs. spaces, blanke linier, braces etc)
  18. 18. Hands-on: Basis installation
  19. 19. Copy og paste http://bit.ly/1bwHCat
  20. 20. Installation af Composer curl -sS https://getcomposer.org/installer | php
  21. 21. Boostrap flow installation php composer.phar create-project --dev --keep-vcs typo3/flow-base-distribution flow Packagist.org package Udviklingversioner Oprethold reference til git Dest. dir
  22. 22. Test [revsbech@je-laptop:~/websites/clio/flow ./flow help TYPO3 Flow 2.0 ("Development" context) usage: ./flow <command identifier> The following commands are currently available: PACKAGE "TYPO3.FLOW": ------------------------------------------------------------------------------- * flow:cache:flush Flush all caches cache:warmup Warm up caches configuration:show Show the active configuration settings configuration:validate Validate the given configuration configuration:generateschema Generate a schema for the given configuration or YAML file.
  23. 23. Database mysql>CREATE database clio; TYPO3: Flow: persistence: # It is good practice to not specify user name and password of the database # connection in this global Settings.yaml file. Rather specify them in the # settings of the respective context (Production / Development ...). backendOptions: host: '127.0.0.1' # adjust to your database host user: 'root' dbname: 'clio' password: ‘MyPassword’ Configuration/Settings.yaml Opret ny database dobbelt space!! Ignorér (for nu) ./flow doctrine:create Opret nødvendige tabeller
  24. 24. Webadgang • Opsæt apache til at pege på Web folderen Hvis i ser dette, er alt i orden. Well done!
  25. 25. Generelt om OOP, DDD, MVC, TDD, AOP og alle de andre 3 bogstavs buzzwords
  26. 26. Udvalgt litteratur ISBN: 0321127420 ISBN: 0321125215 ISBN: 0321268202 ISBN: 0321834577
  27. 27. Objekt orienteret programmering • Indkapsling i “Klasser” og “Objekter” (instanser af en klasse) • Nedarvning • Interfaces class Lager extends Beer implements Drinkable, AlcoholicBeverage { } Lager “is a” Beer Definerer metoder som Lager skal implementere
  28. 28. Public, private, protected, abstract final? • Metoder og variable kan deklareres efter om man ønsker at andre end en selv (private, protected) eller alle andre (public) kan kalde metoden. • Det gør det markant nemmere når man skal fejlsøge at man ved om andre end en selv kalder metoden • Det er god skik at holde variable protected og lavet set- og getter • Abstrakte metoder, er metoder som kun har en definition, og ikke nogen implementering. Metoden skal implementeres i en klasse som arver. Klassen skal være deklareret abstrakt hvis den har mindst én abstrakt metode
  29. 29. Domain Driven Design • Eric Evans • Byggesten • Model: Entitiet og Value objekter • Aggregater: Samlinger af objekter/modeller. Har ét indgangspunkt (aggregate root) • Repository: Persistering af objekter • Services • Bounded contexts
  30. 30. MVC • Måske det mest brugte pattern inden for webudvikling • Opdeling af kode i tre byggesten • Model (Domænemodeller og Repositories) • Views (Præsentation og præsentationslogik) • Controller (Binder modellerne sammen med views)
  31. 31. TDD (Test driven development) • Definer først dit outcome • Skriv unit/funktionelle teste • Programmér indtil dine tests fungerer • Refaktorér
  32. 32. Dependency injection • Også kendt som “The hollywood principle”: Dont call us, we call you. • Øger “Separation of concerns” • Gør test lettere $this->reflectionService vil nu være tilgængelig
  33. 33. AOP: Aspect oriented programming • Bruges til såkaldte “Cross cutting concerns” • Klassiske eksempler er • Logging • Sikkerhed • Giver en måde at “væve” noget kode ind i alle eller udvalgte funktioner. • Advice, Pointcut, Aspect
  34. 34. Filstruktur Forskellige kontekster Webroot Dine pakker
  35. 35. Kommandolinien ./flow help ./flow help ./flow flow:cache:flush (--force) ./flow cache:warmup ./flow doctrine:update ./flow kickstart:* Generel hjælp Nyttige kommander
  36. 36. Kontekst • Forskellige kontekster • Development • Production • Testing FLOW_CONTEXT=Production ./flow help <VirtualHost *:80> ServerAdmin janerik@moc.net ServerName old.new.moc.net DocumentRoot /MYSITEDIR/flow/Web SetEnv FLOW_CONTEXT Production Kommandolinie Web
  37. 37. Pakker • ./flow package:list • Ensartet filstruktur • Installeres med composer • Kan kickstartes med ./flow kicstart:package
  38. 38. Action controllere
  39. 39. Fluid templates (View) Layoutet fortæller hvor de enkelte sektioner skal stå Data fra controlleren
  40. 40. Viewhelpers Egne viewhelpers Indbyggede viewhelpers namespace f er fluid
  41. 41. Modeller Kalder getter (hvis det er et objekt)
  42. 42. Repositories • Abstrakt adgang til data • Implementerer std. metoder som • findAll • findByMyVarName • add • remove • Muligheder for avanceret querying
  43. 43. Query i repository $query = $beerRepository->createQuery(); $items = $query->matching( $query->greater(‘alcoholByVolume’, 5.0) )->limit(10)->execute(); $query = $beerRepository->createQuery(); $items = $query->matching( $query->logicalOr(array( $query->greaterThan(‘alcoholByVolume’, 8.0), $query->LessThan(‘alcoholByVolume’, 2.0) )) )->setOrderings(array(‘name’))->limit(10)->execute(); Eksempel 1 Eksempel 2
  44. 44. Lets see some action!!!
  45. 45. Færdig pakke • Kan hentes herfra: • https://github.com/revsbech/Clio.Beer
  46. 46. Første opgave • Opret ny pakke indeholdende simpel Controller som outputter Hello world • Opret ekstra action og link mellem dem • Implementer en lidt mere “lækker” skabelon (Vælg en eller anden standard) • Bonus opgave: Opret korrekt routes, så den nye pakke er default: http://docs.typo3.org/flow/ TYPO3FlowDocumentation/stable/
  47. 47. ./flow kickstart:package Clio.Beer Opret ny “Pakke” Rediger controller og view Hent std skabelon og rediger layout Resources/Templates/Private/Templates/Standard/Index.html Classes/Clio/Beer/Controller/StandardController Resources/Templates/Private/Layout/Default.html
  48. 48. Anden opgave • Kickstart ny model: Beer samt tilhørende BeerRepository (we like!) • Tilføj ny BeerController • Lav liste over alle øl • Opret ny øl formular • Bonus opgave1 : Lav lidt pænere validering af formularer http://docs.typo3.org/flow/TYPO3FlowDocumentation/ stable/TheDefinitiveGuide/PartII/Validation.html • Bonus opgave 2: Implementer rediger formular
  49. 49. Tredje opgave • Opret Brewery domænemodel. • Tilknyt en mange-til-en relation mellem øl og bryggeri • Opret en CommandController til at oprette bryggerier • Udvide redigeringsformular så man kan vælge bryggeri ved oprettelse • Bonus: Lav mulighed for at se alle øl til et bryggeri
  50. 50. Fjerde opgave • Opret loginformular • Implementer autentifikation samt mulighed for at kunne redigere/oprette øl hvis man er logget ind • http://docs.typo3.org/flow/ TYPO3FlowDocumentation/stable/ TheDefinitiveGuide/PartIII/Security.html
  51. 51. Links • http://martinfowler.com/bliki • http://docs.typo3.org/flow/TYPO3FlowDocumentation/TheDefinitiveGuide/ Index.html • http://en.wikipedia.org/wiki/Domain-driven_design • http://en.wikipedia.org/wiki/Aspect-oriented_programming • https://github.com/revsbech/Clio.Beer

×