際際滷

際際滷Share a Scribd company logo
TYPO3 FLOW
Hands-on undervisning af Clio online 7,8 oktober 2013
Agenda
 Underliggende teknologier
 Hands on: Start nyt 鍖ow 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 work鍖ow
composer create-project
Hent manifest
Udregn afh脱ngigheder
Hent manifest
Klon fra versionsstyring
Git clone
}
PHP Namespaces
Alle navne i denne 鍖l, 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 Aintt Markup
Language
Var: Yet Another
Markup Language
Generelt brugt til
alt kon鍖guration 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 genop鍖nde den dybe tallerken
PSR-0 og Autoload
 De鍖neret af PHP Framework Interoperatability
Group
 PSR0 De鍖nerer autoload og navngivning
 Et fuldt klassenavn skal have denne struktur: VendorNamespaceClassname
 Et namespace skal have et top-level Vendor-pre鍖x samt vilk奪rligt antal
under-namespaces
PSR
 PSR1: Basic coding standard
 https://github.com/php-鍖g/鍖g-standards/blob/master/accepted/PSR-1-
basic-coding-standard.md
 Best eller Good practice (En 鍖l, 辿n klasse, UTF8, UppperCamelCase etc)
 PSR2: Codestyle standard
 https://github.com/php-鍖g/鍖g-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 鍖ow 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
Con鍖guration/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
De鍖nerer metoder som Lager
skal implementere
Public, private, protected, abstract
鍖nal?
 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 de鍖nition,
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)
 De鍖ner 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->re鍖ectionService
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
Clio online flow undervisning
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
 ./鍖ow package:list
 Ensartet 鍖lstruktur
 Installeres med
composer
 Kan kickstartes med
./鍖ow
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 鍖uid
Modeller
Kalder getter (hvis det
er et objekt)
Repositories
 Abstrakt adgang til data
 Implementerer std. metoder som
 鍖ndAll
 鍖ndByMyVarName
 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/鍖ow/
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/鍖ow/TYPO3FlowDocumentation/
stable/TheDe鍖nitiveGuide/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 autenti鍖kation samt mulighed for at
kunne redigere/oprette 淡l hvis man er logget ind
 http://docs.typo3.org/鍖ow/
TYPO3FlowDocumentation/stable/
TheDe鍖nitiveGuide/PartIII/Security.html
Links
 http://martinfowler.com/bliki
 http://docs.typo3.org/鍖ow/TYPO3FlowDocumentation/TheDe鍖nitiveGuide/
Index.html
 http://en.wikipedia.org/wiki/Domain-driven_design
 http://en.wikipedia.org/wiki/Aspect-oriented_programming
 https://github.com/revsbech/Clio.Beer
Ad

Recommended

Super performing websites with TYPO3
Super performing websites with TYPO3
Jan-Erik Revsbech
10 Insightful Quotes On Designing A Better Customer Experience
10 Insightful Quotes On Designing A Better Customer Experience
Yuan Wang
Learn BEM: CSS Naming Convention
Learn BEM: CSS Naming Convention
In a Rocket
How to Build a Dynamic Social Media Plan
How to Build a Dynamic Social Media Plan
Post Planner
Lightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika Aldaba
Lightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika Aldaba
ux singapore
SEO: Getting Personal
SEO: Getting Personal
Kirsty Hulse
Succession Losers: What Happens to Executives Passed Over for the CEO Job?
Succession Losers: What Happens to Executives Passed Over for the CEO Job?
Stanford GSB Corporate Governance Research Initiative
Notes til XPage p奪 1 time
Notes til XPage p奪 1 time
Jakob Majkilde
WordPress Themes
WordPress Themes
risager
Drupalcamp2016 dockerftw
Drupalcamp2016 dockerftw
Reload! A/S
LAMP for webudviklere | Linux | Appacademy.dk
LAMP for webudviklere | Linux | Appacademy.dk
Kristian Langborg-Hansen
Mvc 1+2 Tech Talk 201003
Mvc 1+2 Tech Talk 201003
Copenhagen Software
Administrering af en_d!ng-hjemmeside
Administrering af en_d!ng-hjemmeside
vejlebibea
TypeScript kata: The TDD Style
TypeScript kata: The TDD Style
Ronnie Hegelund
Toolmaster.dk - Joomla templates basis kursus
Toolmaster.dk - Joomla templates basis kursus
Toolmaster.dk
Udvikling af en app med brug af Domino Data Dervice Apiet
Udvikling af en app med brug af Domino Data Dervice Apiet
Jens Bruntt
Word Camp 2013
Word Camp 2013
Mikkel Breum
Hadoop - the data scientist's toolbox
Hadoop - the data scientist's toolbox
Kenneth Geisshirt
Automatiseret GUI-test af Lars Kj淡lholm, BRF Kredit
Automatiseret GUI-test af Lars Kj淡lholm, BRF Kredit
InfinIT - Innovationsnetv脱rket for it
Angular2 workshop
Angular2 workshop
Filip Bruun Bech-Larsen
Onboarding - Konkrete opgaver til nyansatte
Onboarding - Konkrete opgaver til nyansatte
Jes Mandrup
Nagios pr脱sentation (p奪 dansk)
Nagios pr脱sentation (p奪 dansk)
Christian Have
XPages Bean developer
XPages Bean developer
Jakob Majkilde
Produktions og konstruktionsv脱rkt淡jer
Produktions og konstruktionsv脱rkt淡jer
cudim
Wordpress Multisite
Wordpress Multisite
Annette Q Pedersen
Tag trykket af dit (eksterne) API med Azure WebJobs
Tag trykket af dit (eksterne) API med Azure WebJobs
Christian Dalager
Netv脱rk powerpoint
Netv脱rk powerpoint
Martin Hejgaard S淡rensen

More Related Content

Similar to Clio online flow undervisning (20)

Notes til XPage p奪 1 time
Notes til XPage p奪 1 time
Jakob Majkilde
WordPress Themes
WordPress Themes
risager
Drupalcamp2016 dockerftw
Drupalcamp2016 dockerftw
Reload! A/S
LAMP for webudviklere | Linux | Appacademy.dk
LAMP for webudviklere | Linux | Appacademy.dk
Kristian Langborg-Hansen
Mvc 1+2 Tech Talk 201003
Mvc 1+2 Tech Talk 201003
Copenhagen Software
Administrering af en_d!ng-hjemmeside
Administrering af en_d!ng-hjemmeside
vejlebibea
TypeScript kata: The TDD Style
TypeScript kata: The TDD Style
Ronnie Hegelund
Toolmaster.dk - Joomla templates basis kursus
Toolmaster.dk - Joomla templates basis kursus
Toolmaster.dk
Udvikling af en app med brug af Domino Data Dervice Apiet
Udvikling af en app med brug af Domino Data Dervice Apiet
Jens Bruntt
Word Camp 2013
Word Camp 2013
Mikkel Breum
Hadoop - the data scientist's toolbox
Hadoop - the data scientist's toolbox
Kenneth Geisshirt
Automatiseret GUI-test af Lars Kj淡lholm, BRF Kredit
Automatiseret GUI-test af Lars Kj淡lholm, BRF Kredit
InfinIT - Innovationsnetv脱rket for it
Angular2 workshop
Angular2 workshop
Filip Bruun Bech-Larsen
Onboarding - Konkrete opgaver til nyansatte
Onboarding - Konkrete opgaver til nyansatte
Jes Mandrup
Nagios pr脱sentation (p奪 dansk)
Nagios pr脱sentation (p奪 dansk)
Christian Have
XPages Bean developer
XPages Bean developer
Jakob Majkilde
Produktions og konstruktionsv脱rkt淡jer
Produktions og konstruktionsv脱rkt淡jer
cudim
Wordpress Multisite
Wordpress Multisite
Annette Q Pedersen
Tag trykket af dit (eksterne) API med Azure WebJobs
Tag trykket af dit (eksterne) API med Azure WebJobs
Christian Dalager
Netv脱rk powerpoint
Netv脱rk powerpoint
Martin Hejgaard S淡rensen
Notes til XPage p奪 1 time
Notes til XPage p奪 1 time
Jakob Majkilde
WordPress Themes
WordPress Themes
risager
Drupalcamp2016 dockerftw
Drupalcamp2016 dockerftw
Reload! A/S
LAMP for webudviklere | Linux | Appacademy.dk
LAMP for webudviklere | Linux | Appacademy.dk
Kristian Langborg-Hansen
Administrering af en_d!ng-hjemmeside
Administrering af en_d!ng-hjemmeside
vejlebibea
TypeScript kata: The TDD Style
TypeScript kata: The TDD Style
Ronnie Hegelund
Toolmaster.dk - Joomla templates basis kursus
Toolmaster.dk - Joomla templates basis kursus
Toolmaster.dk
Udvikling af en app med brug af Domino Data Dervice Apiet
Udvikling af en app med brug af Domino Data Dervice Apiet
Jens Bruntt
Word Camp 2013
Word Camp 2013
Mikkel Breum
Hadoop - the data scientist's toolbox
Hadoop - the data scientist's toolbox
Kenneth Geisshirt
Onboarding - Konkrete opgaver til nyansatte
Onboarding - Konkrete opgaver til nyansatte
Jes Mandrup
Nagios pr脱sentation (p奪 dansk)
Nagios pr脱sentation (p奪 dansk)
Christian Have
XPages Bean developer
XPages Bean developer
Jakob Majkilde
Produktions og konstruktionsv脱rkt淡jer
Produktions og konstruktionsv脱rkt淡jer
cudim
Tag trykket af dit (eksterne) API med Azure WebJobs
Tag trykket af dit (eksterne) API med Azure WebJobs
Christian Dalager

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 鍖ow 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 work鍖ow composer create-project Hent manifest Udregn afh脱ngigheder Hent manifest Klon fra versionsstyring Git clone }
  • 8. PHP Namespaces Alle navne i denne 鍖l, 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 Aintt Markup Language Var: Yet Another Markup Language Generelt brugt til alt kon鍖guration 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 genop鍖nde den dybe tallerken
  • 16. PSR-0 og Autoload De鍖neret af PHP Framework Interoperatability Group PSR0 De鍖nerer autoload og navngivning Et fuldt klassenavn skal have denne struktur: VendorNamespaceClassname Et namespace skal have et top-level Vendor-pre鍖x samt vilk奪rligt antal under-namespaces
  • 17. PSR PSR1: Basic coding standard https://github.com/php-鍖g/鍖g-standards/blob/master/accepted/PSR-1- basic-coding-standard.md Best eller Good practice (En 鍖l, 辿n klasse, UTF8, UppperCamelCase etc) PSR2: Codestyle standard https://github.com/php-鍖g/鍖g-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 鍖ow 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 Con鍖guration/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 De鍖nerer metoder som Lager skal implementere
  • 28. Public, private, protected, abstract 鍖nal? 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 de鍖nition, 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) De鍖ner 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->re鍖ectionService 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
  • 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 ./鍖ow package:list Ensartet 鍖lstruktur Installeres med composer Kan kickstartes med ./鍖ow 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 鍖ndAll 鍖ndByMyVarName 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/鍖ow/ 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/鍖ow/TYPO3FlowDocumentation/ stable/TheDe鍖nitiveGuide/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 autenti鍖kation samt mulighed for at kunne redigere/oprette 淡l hvis man er logget ind http://docs.typo3.org/鍖ow/ TYPO3FlowDocumentation/stable/ TheDe鍖nitiveGuide/PartIII/Security.html
  • 52. Links http://martinfowler.com/bliki http://docs.typo3.org/鍖ow/TYPO3FlowDocumentation/TheDe鍖nitiveGuide/ Index.html http://en.wikipedia.org/wiki/Domain-driven_design http://en.wikipedia.org/wiki/Aspect-oriented_programming https://github.com/revsbech/Clio.Beer