SlideShare una empresa de Scribd logo
1 de 52
Descargar para leer sin conexión
TYPO3 FLOW
Hands-on undervisning af Clio online 7,8 oktober 2013
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
Underliggende teknologier
• Composer
• Doctrine
• Yaml
• Symphony
• PSR0 - Namespaces, autoloading
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
composer.json
{
"name": "clio/clio-base-distribution",
"description" : "Clio Flow Base Distribution",
"require": {
"typo3/flow": "2.0.*"
},
}
Packagist.org
Composer install workflow
composer create-project
Hent manifest
Udregn afhængigheder
Hent manifest
Klon fra versionsstyring
Git clone
}
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
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)
Eksempel
Eksempel
Ren Doctrine
Doctrine2 i Flow
Yaml
•Yaml Aint’t Markup
Language
•Var: Yet Another
Markup Language
•Generelt brugt til
alt konfiguration i
Flow
Spaces
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
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
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)
Hands-on: Basis installation
Copy og paste
http://bit.ly/1bwHCat
Installation af Composer
curl -sS https://getcomposer.org/installer | php
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
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.
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
Webadgang
• Opsæt apache til at pege på Web folderen
Hvis i ser dette, er
alt i orden. Well
done!
Generelt om OOP, DDD,
MVC, TDD, AOP og alle
de andre 3 bogstavs
buzzwords
Udvalgt litteratur
ISBN: 0321127420 ISBN: 0321125215 ISBN: 0321268202 ISBN: 0321834577
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
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
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
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)
TDD (Test driven development)
• Definer først dit outcome
• Skriv unit/funktionelle teste
• Programmér indtil dine tests fungerer
• Refaktorér
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
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
Filstruktur
Forskellige kontekster
Webroot
Dine pakker
Kommandolinien
./flow help
./flow help
./flow flow:cache:flush (--force)
./flow cache:warmup
./flow doctrine:update
./flow kickstart:*
Generel hjælp
Nyttige kommander
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
Pakker
• ./flow package:list
• Ensartet filstruktur
• Installeres med
composer
• Kan kickstartes med
./flow
kicstart:package
Action controllere
Fluid templates (View)
Layoutet fortæller hvor de enkelte
sektioner skal stå
Data fra controlleren
Viewhelpers
Egne viewhelpers
Indbyggede viewhelpers
namespace f er fluid
Modeller
Kalder getter (hvis det
er et objekt)
Repositories
• Abstrakt adgang til data
• Implementerer std. metoder som
• findAll
• findByMyVarName
• add
• remove
• Muligheder for avanceret querying
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
Lets see some action!!!
Færdig pakke
• Kan hentes herfra:
• https://github.com/revsbech/Clio.Beer
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/
./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
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
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
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
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

Más contenido relacionado

Similar a Clio online flow undervisning

Notes til XPage på 1 time
Notes til XPage på 1 timeNotes til XPage på 1 time
Notes til XPage på 1 timeJakob Majkilde
 
WordPress Themes
WordPress ThemesWordPress Themes
WordPress Themesrisager
 
Drupalcamp2016 dockerftw
Drupalcamp2016 dockerftwDrupalcamp2016 dockerftw
Drupalcamp2016 dockerftwReload! A/S
 
LAMP for webudviklere | Linux | Appacademy.dk
LAMP for webudviklere | Linux | Appacademy.dkLAMP for webudviklere | Linux | Appacademy.dk
LAMP for webudviklere | Linux | Appacademy.dkKristian Langborg-Hansen
 
Administrering af en_d!ng-hjemmeside
Administrering af en_d!ng-hjemmesideAdministrering af en_d!ng-hjemmeside
Administrering af en_d!ng-hjemmesidevejlebibea
 
TypeScript kata: The TDD Style
TypeScript kata: The TDD StyleTypeScript kata: The TDD Style
TypeScript kata: The TDD StyleRonnie Hegelund
 
Toolmaster.dk - Joomla templates basis kursus
Toolmaster.dk - Joomla templates basis kursusToolmaster.dk - Joomla templates basis kursus
Toolmaster.dk - Joomla templates basis kursusToolmaster.dk
 
Udvikling af en app med brug af Domino Data Dervice Apiet
Udvikling af en app med brug af Domino Data Dervice ApietUdvikling af en app med brug af Domino Data Dervice Apiet
Udvikling af en app med brug af Domino Data Dervice ApietJens Bruntt
 
Hadoop - the data scientist's toolbox
Hadoop - the data scientist's toolboxHadoop - the data scientist's toolbox
Hadoop - the data scientist's toolboxKenneth Geisshirt
 
Onboarding - Konkrete opgaver til nyansatte
Onboarding - Konkrete opgaver til nyansatteOnboarding - Konkrete opgaver til nyansatte
Onboarding - Konkrete opgaver til nyansatteJes Mandrup
 
Nagios præsentation (på dansk)
Nagios præsentation (på dansk)Nagios præsentation (på dansk)
Nagios præsentation (på dansk)Christian Have
 
Produktions og konstruktionsværktøjer
Produktions og konstruktionsværktøjerProduktions og konstruktionsværktøjer
Produktions og konstruktionsværktøjercudim
 
Tag trykket af dit (eksterne) API med Azure WebJobs
Tag trykket af dit (eksterne) API med Azure WebJobsTag trykket af dit (eksterne) API med Azure WebJobs
Tag trykket af dit (eksterne) API med Azure WebJobsChristian Dalager
 

Similar a Clio online flow undervisning (20)

Notes til XPage på 1 time
Notes til XPage på 1 timeNotes til XPage på 1 time
Notes til XPage på 1 time
 
WordPress Themes
WordPress ThemesWordPress Themes
WordPress Themes
 
Drupalcamp2016 dockerftw
Drupalcamp2016 dockerftwDrupalcamp2016 dockerftw
Drupalcamp2016 dockerftw
 
LAMP for webudviklere | Linux | Appacademy.dk
LAMP for webudviklere | Linux | Appacademy.dkLAMP for webudviklere | Linux | Appacademy.dk
LAMP for webudviklere | Linux | Appacademy.dk
 
Mvc 1+2 Tech Talk 201003
Mvc 1+2 Tech Talk 201003Mvc 1+2 Tech Talk 201003
Mvc 1+2 Tech Talk 201003
 
Administrering af en_d!ng-hjemmeside
Administrering af en_d!ng-hjemmesideAdministrering af en_d!ng-hjemmeside
Administrering af en_d!ng-hjemmeside
 
TypeScript kata: The TDD Style
TypeScript kata: The TDD StyleTypeScript kata: The TDD Style
TypeScript kata: The TDD Style
 
Toolmaster.dk - Joomla templates basis kursus
Toolmaster.dk - Joomla templates basis kursusToolmaster.dk - Joomla templates basis kursus
Toolmaster.dk - Joomla templates basis kursus
 
Udvikling af en app med brug af Domino Data Dervice Apiet
Udvikling af en app med brug af Domino Data Dervice ApietUdvikling af en app med brug af Domino Data Dervice Apiet
Udvikling af en app med brug af Domino Data Dervice Apiet
 
Word Camp 2013
Word Camp 2013 Word Camp 2013
Word Camp 2013
 
Hadoop - the data scientist's toolbox
Hadoop - the data scientist's toolboxHadoop - the data scientist's toolbox
Hadoop - the data scientist's toolbox
 
Automatiseret GUI-test af Lars Kjølholm, BRF Kredit
Automatiseret GUI-test af Lars Kjølholm, BRF KreditAutomatiseret GUI-test af Lars Kjølholm, BRF Kredit
Automatiseret GUI-test af Lars Kjølholm, BRF Kredit
 
Angular2 workshop
Angular2 workshopAngular2 workshop
Angular2 workshop
 
Onboarding - Konkrete opgaver til nyansatte
Onboarding - Konkrete opgaver til nyansatteOnboarding - Konkrete opgaver til nyansatte
Onboarding - Konkrete opgaver til nyansatte
 
Nagios præsentation (på dansk)
Nagios præsentation (på dansk)Nagios præsentation (på dansk)
Nagios præsentation (på dansk)
 
XPages Bean developer
XPages Bean developerXPages Bean developer
XPages Bean developer
 
Produktions og konstruktionsværktøjer
Produktions og konstruktionsværktøjerProduktions og konstruktionsværktøjer
Produktions og konstruktionsværktøjer
 
Wordpress Multisite
Wordpress MultisiteWordpress Multisite
Wordpress Multisite
 
Tag trykket af dit (eksterne) API med Azure WebJobs
Tag trykket af dit (eksterne) API med Azure WebJobsTag trykket af dit (eksterne) API med Azure WebJobs
Tag trykket af dit (eksterne) API med Azure WebJobs
 
Netværk powerpoint
Netværk powerpointNetværk powerpoint
Netværk powerpoint
 

Clio online flow undervisning

  • 1. TYPO3 FLOW Hands-on undervisning af Clio online 7,8 oktober 2013
  • 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. Underliggende teknologier • Composer • Doctrine • Yaml • Symphony • PSR0 - Namespaces, autoloading
  • 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. composer.json { "name": "clio/clio-base-distribution", "description" : "Clio Flow Base Distribution", "require": { "typo3/flow": "2.0.*" }, }
  • 7. Composer install workflow composer create-project Hent manifest Udregn afhængigheder Hent manifest Klon fra versionsstyring Git clone }
  • 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. 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)
  • 14. Yaml •Yaml Aint’t Markup Language •Var: Yet Another Markup Language •Generelt brugt til alt konfiguration i Flow Spaces
  • 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. 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. 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)
  • 20. Installation af Composer curl -sS https://getcomposer.org/installer | php
  • 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. 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. 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. Webadgang • Opsæt apache til at pege på Web folderen Hvis i ser dette, er alt i orden. Well done!
  • 25. Generelt om OOP, DDD, MVC, TDD, AOP og alle de andre 3 bogstavs buzzwords
  • 26. Udvalgt litteratur ISBN: 0321127420 ISBN: 0321125215 ISBN: 0321268202 ISBN: 0321834577
  • 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. 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. 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. 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. TDD (Test driven development) • Definer først dit outcome • Skriv unit/funktionelle teste • Programmér indtil dine tests fungerer • Refaktorér
  • 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. 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.
  • 36. Kommandolinien ./flow help ./flow help ./flow flow:cache:flush (--force) ./flow cache:warmup ./flow doctrine:update ./flow kickstart:* Generel hjælp Nyttige kommander
  • 37. 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
  • 38. Pakker • ./flow package:list • Ensartet filstruktur • Installeres med composer • Kan kickstartes med ./flow kicstart:package
  • 40. Fluid templates (View) Layoutet fortæller hvor de enkelte sektioner skal stå Data fra controlleren
  • 42. Modeller Kalder getter (hvis det er et objekt)
  • 43. Repositories • Abstrakt adgang til data • Implementerer std. metoder som • findAll • findByMyVarName • add • remove • Muligheder for avanceret querying
  • 44. 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
  • 45. Lets see some action!!!
  • 46. Færdig pakke • Kan hentes herfra: • https://github.com/revsbech/Clio.Beer
  • 47. 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/
  • 48. ./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
  • 49. 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
  • 50. 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
  • 51. 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
  • 52. 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