neue wege mit contao 4 - barrierefrei · schöne neue php-welt neue wege mit contao 4 2016....

65
terminal42 web development gmbh Schöne neue PHP-Welt Neue Wege mit Contao 4 Contao Konferenz 2016

Upload: phungnga

Post on 04-Jun-2018

224 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Schöne neue PHP-Welt

Neue Wege mit Contao 4

Co

nta

o K

on

fere

nz

20

16

Page 2: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Über mich

• Andreas Schempp / terminal42 gmbh

• Schweiz

• Contao Core Entwickler

• Vorstand (Schatzmeister) Contao Association

• Hauptentwickler von Isotope eCommerce

Page 3: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

© Karl Heinz Görmar / myheimat.de

Page 4: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

© www.ziegelhaus-johanni.de

Page 5: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

© benik.at / Shutterstock

Page 6: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Page 7: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Page 8: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Composer Statistik

Totals

Packages registered: 95’284Versions available: 502’313Packages installed: 2’019’225’476

(since 2012-04-13)

https://packagist.org/statistics

Page 9: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

&

Page 10: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Symfony Verzeichnisstruktur

• app/

• config/…

• logs/…

• AppKernel.php

• console

• src/

• web/

• app.php

• app_dev.php

• composer.json

Page 11: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Symfony Verzeichnisstruktur

• app/

• config/…

• logs/…

• AppKernel.php

• console

• src/

• web/

• app.php

• app_dev.php

• composer.json

Page 12: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Symfony Verzeichnisstruktur

• app/

• config/…

• logs/…

• AppKernel.php

• console

• src/

• web/

• app.php

• app_dev.php

• composer.json

Page 13: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Symfony Verzeichnisstruktur

• app/

• config/…

• logs/…

• AppKernel.php

• console

• src/

• web/

• app.php

• app_dev.php

• composer.json

Page 14: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Symfony Verzeichnisstruktur

• app/

• config/…

• logs/…

• AppKernel.php

• console

• src/

• web/

• app.php

• app_dev.php

• composer.json

Page 15: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Symfony Verzeichnisstruktur

• app/

• config/…

• logs/…

• AppKernel.php

• console

• src/

• web/

• app.php

• app_dev.php

• composer.json

Page 16: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Symfony Verzeichnisstruktur

• app/

• config/…

• logs/…

• AppKernel.php

• console

• src/

• web/

• app.php

• app_dev.php

• composer.json

Page 17: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Symfony Verzeichnisstruktur

• app/

• config/…

• logs/…

• AppKernel.php

• console

• src/

• web/

• app.php

• app_dev.php

• composer.json

Page 18: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Symfony Verzeichnisstruktur

• app/

• config/…

• logs/…

• AppKernel.php

• console

• src/

• web/

• app.php

• app_dev.php

• composer.json

Page 19: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Contao Verzeichnisstruktur

• system/

• config/ …

• modules/ …

• initialize.php

• templates/

• files/

• vendor/contao/ …

Page 20: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Page 21: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Service Container

• wie $GLOBALS , aber Objekt-Orientiert

• Application Configuration

• Services

• Dependency Injection

Page 22: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Dependency Injection

• Static: Input::get()

• Singleton: Database::getInstance()

• Fetch: System::import() & System::importStatic()

• Constructor Injection: __construct(Database $db)

• Setter Injection: $obj->setDatabase(Database $db)

Page 23: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Service Configuration

Page 24: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Contao Framework

Page 25: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Page 26: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Dependency Injection

System::import() & System::importStatic()

• Bisher

method_exists('getInstance', $class)

/* … */

new $class();

Page 27: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Hooks

Page 28: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Callback

Page 29: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Callbacks

Page 30: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

UrlGenerator

$urlGenerator = System::getContainer() ->get('contao.routing.url_generator');

$urlGenerator->generate( 'foo/{article}', ['article' => 'bar', 'auto_item' => 'article'] );

• => /foo/bar.html

https://github.com/contao/core-bundle/pull/480

Page 31: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

UrlGenerator

$urlGenerator = System::getContainer() ->get('contao.routing.url_generator');

$urlGenerator->generate( 'foo/{article}', ['article' => 'bar', 'example' => 'test'] );

• => /foo/article/bar.html?example=test

https://github.com/contao/core-bundle/pull/480

Page 32: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

UrlGenerator

$page = PageModel::findWithDetails(/* … */);

$urlGenerator->generate( ($page->alias ?: $page->id) . '/{items}', [ 'items' => 'example', '_domain' => $page->domain, '_ssl' => (bool) $page->rootUseSSL ], UrlGeneratorInterface::ABSOLUTE_URL );

Page 33: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

contao.cache

System::getContainer()->get('contao.cache')

• $cache->save('vendor_bundle.foobar', 'test');

• $cache->fetch('vendor_bundle.foobar');

https://github.com/contao/core-bundle/pull/468

Page 34: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

PaletteManipulator

https://github.com/contao/core-bundle/pull/474

Page 35: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Monolog => tl_log

$logger = System::getContainer()->get('logger');

$logger->info( 'Allgemeine Meldung', [

'contao' => new ContaoContext( __METHOD__ )

] );

https://github.com/contao/core-bundle/pull/449

Page 36: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Monolog => tl_log

$logger = System::getContainer()->get('logger');

$logger->error( 'Fehlermeldung', [

'contao' => new ContaoContext( __METHOD__ )

] );

Page 37: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Monolog => tl_log

$logger = System::getContainer()->get('logger');

$logger->debug( 'E-Mail sent to [email protected]', [

'contao' => new ContaoContext( __METHOD__, ContaoContext::NEWSLETTER )

] );

Page 38: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Monolog => E-Mail

# Monolog configuration monolog: handlers: email: type: swift_mailer from_email: '[email protected]' to_email: '[email protected]' subject: 'An Error Occurred!’ level: 'error'

http://symfony.com/doc/current/cookbook/logging/monolog_email.html

Page 39: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Web Profiler

Page 40: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

app_dev.php

• Ersetzt Contao Debug Console

• Zusätzlicher Entry Point, immer verfügbar

• Freier Zugriff auf Localhost

• Passwortschutz auf Server

Page 41: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Page 42: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Page 43: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Page 44: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Page 45: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Page 46: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

VarDumper Component

• Ersatz für var_dump()

• Ersetzt dump() aus Contao 3

• Ausgabe im Web Profiler statt mitten in der Seite

• Standardmässig nur in app_dev.php !

http://symfony.com/doc/current/components/var_dumper/introduction.html

Page 47: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

dump()

Page 48: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Page 49: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Unit Tests

Page 50: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Unit Tests in Contao 3

• Schwierig wegen Inheritance (Parent-Klassen)

class MyModule extends Module extends Frontend extends Controller extends System

• Schwierig wegen statischen Methoden

Input::get('foobar')

Page 51: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Unit Tests in Contao 4

• Getestete Libraries nutzen dank Composer

• Services mit Dependency Injection

• Contao Framework?

Page 52: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Unit Tests in Contao 4

Page 53: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

ContaoFramework Adapter

System::getContainer()->get('contao.framework')

$input = $f->getAdapter('Contao\Input');

$foo = $input->get('…');

Page 54: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

ContaoFramework Adapter

function testSomething() { $container = $this->getMock(/* … */); $framework = $this->getMock('ContaoFramework'); $input = $this->getMock('Contao\Input');

$framework ->method('getAdapter') ->willReturn($input);

$container->method('get')->willReturn($framework)

System::setContainer($container); }

Page 55: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Deployment

Page 56: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Deployment Prinzip

• Code-Anpassungen immer an Kopie der Installation

• ggf. mehrere Installation (Dev, Staging, Production)

• Automatisierter Upload auf Live-Server

• Automatisches ausführen benötiger Befehle

Page 57: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Deployment Releases

/var/www |--releases | |--20150513120631 |--shared | |--app/config/parameters.yml | |--app/logs | |--files | |--... |--current -> /var/www/releases/20160519120631

Page 58: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Deployment Tools

• Capistrano (Ruby)

• Fabric (Python)

• Deployer (PHP)

• Magallanes (PHP)

http://symfony.com/doc/current/cookbook/deployment/tools.html

Page 59: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Magallanes

• Mehrere Environments & Hosts

• Releases

• Konfiguration über YAML

• Eigene Tasks als PHP-Objekte

www.magephp.com

Page 60: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Magallanes

vendor/bin/mage deploy to:production

Page 61: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Page 62: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Page 63: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh

Page 64: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection
Page 65: Neue Wege mit Contao 4 - Barrierefrei · Schöne neue PHP-Welt Neue Wege mit Contao 4 2016. terminal42 web development gmbh Über mich ... Dependency Injection

terminal42 web development gmbh