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
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)
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)
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
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
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
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