Clio online flow undervisning

52
TYPO3 FLOW Hands-on undervisning af Clio online 7,8 oktober 2013

description

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

Transcript of Clio online flow undervisning

Page 1: Clio online flow undervisning

TYPO3 FLOWHands-on undervisning af Clio online 7,8 oktober 2013

Page 2: Clio online flow undervisning

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

Page 3: Clio online flow undervisning

Underliggende teknologier

• Composer

• Doctrine

• Yaml

• Symphony

• PSR0 - Namespaces, autoloading

Page 4: Clio online flow undervisning

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 | phpphp composer.phar help

Page 5: Clio online flow undervisning

composer.json{ "name": "clio/clio-base-distribution", "description" : "Clio Flow Base Distribution", "require": { "typo3/flow": "2.0.*" },}

Page 6: Clio online flow undervisning

Packagist.org

Page 7: Clio online flow undervisning

Composer install workflow

composer create-project

Hent manifest

Udregn afhængigheder

Hent manifest

Klon fra versionsstyring

Git clone }

Page 8: Clio online flow undervisning

PHP NamespacesAlle navne i denne fil, er nu inde i namespacet Clio\Beer\Controller

Den fulde “path” er altså \Clio\Beer\Controller\BeerController

Når jeg skriver Flow mener jeg i virkeligheden \TYPO3\Flow\Annotations

Når jeg skriver Debugger, mener jeg altså den her Debugger\TYPO3\Flow\Error\Debugger

Page 9: Clio online flow undervisning

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)

Page 10: Clio online flow undervisning

Eksempel

Page 11: Clio online flow undervisning

Eksempel

Page 12: Clio online flow undervisning

Ren Doctrine

Page 13: Clio online flow undervisning

Doctrine2 i Flow

Page 14: Clio online flow undervisning

Yaml

•Yaml Aint’t Markup Language

•Var: Yet Another Markup Language

•Generelt brugt til alt konfiguration i Flow

Spaces

Page 15: Clio online flow undervisning

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

Page 16: Clio online flow undervisning

PSR-0 og Autoload

• Defineret af PHP Framework Interoperatability Group

• PSR0 Definerer autoload og navngivning• Et fuldt klassenavn skal have denne struktur: Vendor\Namespace\Classname

• Et namespace skal have et top-level “Vendor”-prefix samt vilkårligt antal “under”-namespaces

Page 17: Clio online flow undervisning

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)

Page 18: Clio online flow undervisning

Hands-on: Basis installation

Page 19: Clio online flow undervisning

Copy og paste

http://bit.ly/1bwHCat

Page 20: Clio online flow undervisning

Installation af Composer

curl -sS https://getcomposer.org/installer | php

Page 21: Clio online flow undervisning

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

Page 22: Clio online flow undervisning

Test[revsbech@je-laptop:~/websites/clio/flow ./flow helpTYPO3 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.

Page 23: Clio online flow undervisning

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

Page 24: Clio online flow undervisning

Webadgang

• Opsæt apache til at pege på Web folderen

Hvis i ser dette, er alt i orden. Well done!

Page 25: Clio online flow undervisning

Generelt om OOP, DDD, MVC, TDD, AOP og alle de andre 3 bogstavs buzzwords

Page 26: Clio online flow undervisning

Udvalgt litteratur

ISBN: 0321127420 ISBN: 0321125215 ISBN: 0321268202 ISBN: 0321834577

Page 27: Clio online flow undervisning

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

Page 28: Clio online flow undervisning

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

Page 29: Clio online flow undervisning

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

Page 30: Clio online flow undervisning

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)

Page 31: Clio online flow undervisning

TDD (Test driven development)

• Definer først dit outcome

• Skriv unit/funktionelle teste

• Programmér indtil dine tests fungerer

• Refaktorér

Page 32: Clio online flow undervisning

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

Page 33: Clio online flow undervisning

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

Page 34: Clio online flow undervisning
Page 35: Clio online flow undervisning

FilstrukturForskellige kontekster

Webroot

Dine pakker

Page 36: Clio online flow undervisning

Kommandolinien

./flow help

./flow help

./flow flow:cache:flush (--force)

./flow cache:warmup

./flow doctrine:update

./flow kickstart:*

Generel hjælp

Nyttige kommander

Page 37: Clio online flow undervisning

Kontekst

• Forskellige kontekster• Development

• Production

• TestingFLOW_CONTEXT=Production ./flow help

<VirtualHost *:80> ServerAdmin [email protected] ServerName old.new.moc.net DocumentRoot /MYSITEDIR/flow/Web SetEnv FLOW_CONTEXT Production

Kommandolinie

Web

Page 38: Clio online flow undervisning

Pakker

• ./flow package:list

• Ensartet filstruktur

• Installeres med composer

• Kan kickstartes med ./flow kicstart:package

Page 39: Clio online flow undervisning

Action controllere

Page 40: Clio online flow undervisning

Fluid templates (View)Layoutet fortæller hvor de enkelte sektioner skal stå

Data fra controlleren

Page 41: Clio online flow undervisning

ViewhelpersEgne viewhelpers

Indbyggede viewhelpersnamespace f er fluid

Page 42: Clio online flow undervisning

Modeller

Kalder getter (hvis det er et objekt)

Page 43: Clio online flow undervisning

Repositories

• Abstrakt adgang til data

• Implementerer std. metoder som• findAll

• findByMyVarName

• add

• remove

• Muligheder for avanceret querying

Page 44: Clio online flow undervisning

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

Page 45: Clio online flow undervisning

Lets see some action!!!

Page 46: Clio online flow undervisning

Færdig pakke

• Kan hentes herfra: • https://github.com/revsbech/Clio.Beer

Page 47: Clio online flow undervisning

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/

Page 48: Clio online flow undervisning

./flow kickstart:package Clio.Beer

Opret ny “Pakke”

Rediger controller og view

Hent std skabelon og rediger layout

Resources/Templates/Private/Templates/Standard/Index.htmlClasses/Clio/Beer/Controller/StandardController

Resources/Templates/Private/Layout/Default.html

Page 49: Clio online flow undervisning

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 formularerhttp://docs.typo3.org/flow/TYPO3FlowDocumentation/stable/TheDefinitiveGuide/PartII/Validation.html

• Bonus opgave 2: Implementer rediger formular

Page 50: Clio online flow undervisning

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

Page 51: Clio online flow undervisning

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

Page 52: Clio online flow undervisning

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