Weitere ähnliche Inhalte Ähnlich wie InspiringCon15: Bringing TYPO3 Legacy Applications into the Flow (20) Kürzlich hochgeladen (20) InspiringCon15: Bringing TYPO3 Legacy Applications into the Flow1. CC BY-SA, James Hammond
https://www.flickr.com/photos/jameshammond/8732132809
Bringing TYPO3 Legacy
Applications into the Flow
Martin Helmich
m.helmich@mittwald.de @martin-helmich
Inspiring Conference 2015, Kolbermoor
March 28th, 2015
7. CC BY, Dude of Lego
https://www.flickr.com/photos/dudeoflego/5105352800
9. CC BY-SA, D464-Darren Hall
http://commons.wikimedia.org/wiki/File:Demolition_in_Ballymun_-_Flickr_-_D464-Darren_Hall.jpg
11. CC BY-SA, Wolfe House & Building Movers
http://en.wikipedia.org/wiki/File:Hydrolic_dollies_relocate_house_in_Newark,_Delaware.jpg
20. namespace
MyExtDomainModel;
use
TYPO3FlowAnnotations
as
Flow;
use
DoctrineORMMapping
as
ORM;
/**
*
@FlowEntity
*/
class
Car
{
/**
*
@var
string
*
@FlowValidate('NotEmpty')
*/
protected
$licenseNumber;
/**
*
@var
Manufacturer
*
@ORMManyToOne
*/
protected
$manufacturer;
}
class
Tx_MyExt_Domain_Model_Car
extends
Tx_Extbase_DomainObject_AbstractEntity
{
/**
*
@var
string
*
@validate
notempty
*/
protected
$licenseNumber;
/**
*
@var
Tx_MyExt_Domain_Model_Manufacturer
*/
protected
$manufacturer;
}
TYPO3 CMS
(Extbase)
TYPO3 Flow
21. namespace
MyExtDomainModel;
use
TYPO3FlowAnnotations
as
Flow;
use
DoctrineORMMapping
as
ORM;
/**
*
@FlowEntity
*/
class
Car
{
/**
*
@var
string
*
@FlowValidate('NotEmpty')
*/
protected
$licenseNumber;
/**
*
@var
Manufacturer
*
@ORMManyToOne
*/
protected
$manufacturer;
}
class
Tx_MyExt_Domain_Model_Car
extends
Tx_Extbase_DomainObject_AbstractEntity
{
/**
*
@var
string
*
@validate
notempty
*/
protected
$licenseNumber;
/**
*
@var
Tx_MyExt_Domain_Model_Manufacturer
*/
protected
$manufacturer;
}
TYPO3 CMS
(Extbase)
TYPO3 Flow
22. namespace
MyExtDomainModel;
use
TYPO3FlowAnnotations
as
Flow;
use
DoctrineORMMapping
as
ORM;
/**
*
@FlowEntity
*/
class
Car
{
/**
*
@var
string
*
@FlowValidate('NotEmpty')
*/
protected
$licenseNumber;
/**
*
@var
Manufacturer
*
@ORMManyToOne
*/
protected
$manufacturer;
}
class
Tx_MyExt_Domain_Model_Car
extends
Tx_Extbase_DomainObject_AbstractEntity
{
/**
*
@var
string
*
@validate
notempty
*/
protected
$licenseNumber;
/**
*
@var
Tx_MyExt_Domain_Model_Manufacturer
*/
protected
$manufacturer;
}
TYPO3 CMS
(Extbase)
TYPO3 Flow
23. namespace
MyExtDomainModel;
use
TYPO3FlowAnnotations
as
Flow;
use
DoctrineORMMapping
as
ORM;
/**
*
@FlowEntity
*/
class
Car
{
/**
*
@var
string
*
@FlowValidate('NotEmpty')
*/
protected
$licenseNumber;
/**
*
@var
Manufacturer
*
@ORMManyToOne
*/
protected
$manufacturer;
}
class
Tx_MyExt_Domain_Model_Car
extends
Tx_Extbase_DomainObject_AbstractEntity
{
/**
*
@var
string
*
@validate
notempty
*/
protected
$licenseNumber;
/**
*
@var
Tx_MyExt_Domain_Model_Manufacturer
*/
protected
$manufacturer;
}
TYPO3 CMS
(Extbase)
TYPO3 Flow
32. <?php
class
FooTastic
{
public
function
hello($who)
{
echo
"Hello
$who!";
}
}
hello.php
Input
Source
File
33. <?php
class
FooTastic
{
public
function
hello($who)
{
echo
"Hello
$who!";
}
}
hello.php
Input
Source
File
Parser
34. <?php
class
FooTastic
{
public
function
hello($who)
{
echo
"Hello
$who!";
}
}
hello.php
Input
Source
File
Parser
Abstract
Syntax
Tree
35. class
Tx_MyExt_Domain_Model_Car
extends
Tx_Extbase_DomainObject_AbstractEntity
{
/**
*
@var
string
*
@validate
notempty
*/
protected
$licenseNumber;
/**
*
@var
Tx_MyExt_Domain_Model_Manufacturer
*/
protected
$manufacturer;
}
Source Code
36. class
Tx_MyExt_Domain_Model_Car
extends
Tx_Extbase_DomainObject_AbstractEntity
{
/**
*
@var
string
*
@validate
notempty
*/
protected
$licenseNumber;
/**
*
@var
Tx_MyExt_Domain_Model_Manufacturer
*/
protected
$manufacturer;
}
class
name=Tx_..._Car
abstract=false
final=false
extends
name=Tx_..._AbstractEntity
stmts
property
name=licenseNumber
docComment="/**n..."
property
name=manufacturer
docComment="/**n..."
Source Code Syntax Tree
37. <?php
class
FooTastic
{
public
function
hello($who)
{
echo
"Hello
$who!";
}
}
hello.php
Input
Source
File
Parser
Abstract
Syntax
Tree
38. <?php
class
FooTastic
{
public
function
hello($who)
{
echo
"Hello
$who!";
}
}
hello.php
Input
Source
File
Parser
Transformation
Rules
Trans-
former
Abstract
Syntax
Tree
39. <?php
class
FooTastic
{
public
function
hello($who)
{
echo
"Hello
$who!";
}
}
hello.php
Input
Source
File
Parser
Transformation
Rules
Trans-
former
Printer
<?php
namespace
Foo;
class
FooTastic
{
/**
@FlowInject
*/
protected
$greeter;
public
function
hello($who)
{
$this-‐>greeter-‐
>greet($who);
}
hello_improved.php
output
Source
File(s)
Abstract
Syntax
Tree
40. <?php
class
FooTastic
{
public
function
hello($who)
{
echo
"Hello
$who!";
}
}
hello.php
Input
Source
File
Parser
class
FooTastic:
def
hello(who):
print
"Hello
%s"
%
who
hello.py
Transformation
Rules
Trans-
former
Printer
<?php
namespace
Foo;
class
FooTastic
{
/**
@FlowInject
*/
protected
$greeter;
public
function
hello($who)
{
$this-‐>greeter-‐
>greet($who);
}
hello_improved.php
output
Source
File(s)
Abstract
Syntax
Tree
41. namespace
MyExtDomainModel;
use
TYPO3FlowAnnotations
as
Flow;
use
DoctrineORMMapping
as
ORM;
/**
*
@FlowEntity
*/
class
Car
{
/**
*
@var
string
*
@FlowValidate('NotEmpty')
*/
protected
$licenseNumber;
/**
*
@var
Manufacturer
*
@ORMManyToOne
*/
protected
$manufacturer;
}
class
Tx_MyExt_Domain_Model_Car
extends
Tx_Extbase_DomainObject_AbstractEntity
{
/**
*
@var
string
*
@validate
notempty
*/
protected
$licenseNumber;
/**
*
@var
Tx_MyExt_Domain_Model_Manufacturer
*/
protected
$manufacturer;
}
TYPO3 CMS
(Extbase)
TYPO3 Flow
53. Open Problems
Ease of Extensibility
„I want to migrate from Zend
to Flow, but writing new
transformation rules is just too
complex!“
57. Thank you
This work is licensed under a Creative Commons Attribution-
ShareAlike 4.0 International License.
m.helmich@mittwald.de
@martin-helmich
https://github.com/martin-helmich
https://github.com/mittwald/flow-metamorph