SlideShare a Scribd company logo
Doctrine2 Behaviour Extensions
zaostřeno na stromy
Nikol Ježková
Doctrine2 Behaviour Extensions
● Tree
● Translatable
● Sluggable
● Uploadable
● Loggable
● Sortable
● Timestampable
● IpTraceable
● Blameable
● SoftDeletable
● References
● ReferenceIntegrity
gedmo/doctrine-extensions
● $ composer require gedmo/doctrine-extensions
●
ORM, ODM
Doctrine 2.2.x – 2.5.x
PHP ≥ 5.4
Kompatibilita
https://github.com/Atlantic18/DoctrineExtensions
Listeners
Translation
Tree
Sluggable
Timestampable
...
onFlush
EntityManager
Entita
Annotace
XML
YAML
EventManager
Doctrine Event System
mapování
Hierarchická data
Nested-Set chování
@GedmoTree
GedmoTreeTreeListener
type [Nested-set, Closure-table, Materialized-path]
level1
2
3
parent
parent
child child
child child
parent
child
Nested-Set behaviour
@GedmoTreeLevel 1 12
5 63 4 9 10
2 7 8 11
@GedmoTree(type="nested")
1
2
3
@GedmoTreeLeft @GedmoTreeRight
@GedmoTreeParent
1
2 3
use GedmoMappingAnnotation as Gedmo;
trait NestedSetEntity
getRootNodes
getPath
getChildren
getLeafs
getNextSiblings
getPrevSiblings
getNodesHierarchy
moveUp
moveDown
NestedTreeRepository
persistAsFirstChild
persistAsFirstChildOf
persistAsLastChild
persistAsLastChildOf
persistAsNextSibling
persistAsNextSiblingOf
persistAsPrevSibling
persistAsPrevSiblingOf
removeFromTree
@GedmoTreeLevel
@GedmoTreeParent
@GedmoTreePath
@GedmoTreePathSource
@GedmoTree(type="materializedPath")
MaterializedPathRepository, trait MaterializedPath
id title parent_id path lvl
1 PC null pc-1 1
2 Notebook 1 pc-1,Notebook-2 2
3 MacBook 2 pc-1,Notebook-2, MacBook-3 3
4 MacBook Air 3 pc-1,Notebook-2, MacBook-3, MacBook Air-4 4
MaterializedPathRepository
getRootNodes [Query / QueryBuilder]
getPath [Query / QueryBuilder]
getNodesHierarchy [Query / QueryBuilder]
getTree [Query / QueryBuilder]
getChildren [Query / QueryBuilder]
childrenHierarchy
@GedmoTreeLevel
@GedmoTreeParent
addClosure
@GedmoTree(type="closure")
@GedmoTreeClosure(class="ClosureEntity")
ClosureTreeRepository
ancestor descendant depth
ClosureEntity extends AbstractClosureEntity
ClosureTreeRepository
getRootNodes [Query / QueryBuilder]
getPath [Query / QueryBuilder]
getNodesHierarchy [Query / QueryBuilder]
getTree [Query / QueryBuilder]
getChildren [Query / QueryBuilder]
childrenHierarchy
removeFromTree
@GedmoUploadable
UploadableListener, interface Uploadable
@GedmoUploadableFilePath
@GedmoUploadableFileName
@GedmoUploadableFileMimeType
@GedmoUploadableFileSize
@GedmoUploadable
path filenameGenerator allowOverwrite appendNumber callback
$fileinfo = $_FILES['foo'];
x
$fileinfo instanceOf UploadableFileInfoFileInfoArray;
// UploadableListener
$listener->addEntityFileInfo($file, $fileinfo);
Translatable
TranslatableListener
@GedmoTranslatable
@GedmoLocale
TranslationRepository
Entita Listener
@GedmoLocale
@GedmoTranslatable
setLocale
$defaultLocale
$locale
class Article implements GedmoTranslatableTranslatable
{ ...
$article = new EntityArticle;
$article->setTitle('Konference');
$article->setContent(Začátek');
// TranslationRepository
$repo->translate($article, 'title', 'de_de', 'Konferenz')
->translate($article, 'content', 'de_de', 'Beginn');
$em->persist($article);
$em->flush();
$article->setLocale('de_de');
$em->refresh($article);
$article->setLocale('cs_cz');
$em->refresh($article);
$article = $repo->findObjectByTranslatedField('title',
'Konferenz', 'EntityArticle');
GedmoTranslatableEntityRepositoryTranslationRepository
@GedmoSlug(
fields={"title", "content"}
separator="="
prefix="begin-"
suffix="-end"
style="lower"
updatable
unique
handlers
)
Sluggable
SluggableListener
begin-konference=phplive=brno=zilina-end
$entity->title = 'Konference PHPLive';
$entity->content = 'Brno Žilina'
@GedmoSlugHandler
● class: RelativeSlugHandler
● options
– relationField
– relationSlugField
● class: TreeSlugHandler
● options
– parentRelationField
– relationSlugField
@GedmoSlug(
handlers={
@GedmoSlugHandler(
class="RelativeSlugHandler",
options={
@GedmoSlugHandlerOption(
name="relationField",
value="entity"
),
@GedmoSlugHandlerOption(
name="relationSlugField",
value="slug"
),
@GedmoSlugHandlerOption(
name="separator",
Value="/"
)
}
)
},
fields={"title"}
)
@GedmoSortablePosition
@GedmoSortableGroup
setPosition(-1)
SortableRepository
getBySortableGroups(['title' => 'PHP live'])
id: 2 – 4 – 5 – 3 – 1
Sortable
SortableRepository
id SortableGroup
$title
SortablePosition
$position
1 PHP live 5
2 PHP live 1
3 PHP live 4
4 PHP live 2
5 PHP live 3
@GedmoTimestampable
● trait TimestampableEntity
@GedmoIpTraceable
● trait IpTraceableEntity
on creatte/update/change
field
value
Timestampable, IpTraceable
TimestampableListener, IpTraceableListener
@GedmoMappingAnnotationBlameable(
on creatte/update/change
field
value
)
Blameable
BlameableListener, trait BlameableEntity
@GedmoVersioned
LogEntryRepository
->revert($entity, 1)
@GedmoLoggable
LoggableListener
id
action
logged_at
object_id
object_class
version
data
trait SoftDeleteableEntity
SoftDeleteable(fieldName="deletedAt")
SoftDeleteableFilter
SoftDeleteableFilter
enable null
disable
find
disableForEntity
enableForEntity
enable
null in DBdisable
delete
disableForEntity
enableForEntity
mark in DB
References, ReferenceIntegrity
entity
entity
ReferencesListener
ReferenceIntegrityListener
● StofDoctrineExtensionsBundle
● gedmo/doctrine-extensions
Uploadable
StofDoctrineExtensionsBundleUploadableUploadableManager
SymfonyComponentHttpFoundationFileUploadedFile
$manager->markEntityToUpload($file, $uploadedFile);
● Kdyby/Doctrine
● rixxi/gedmo
laravel-doctrine/extensions
● Propel
nested_set, sluggable, timestampable, sortable,
versionable
● Eloquent ORM [laravel]
Soft Deleting, Timestamps
● RedBeanPHP
tree
Behaviours v jiných ORM
Děkuji za pozornost :-)

More Related Content

Similar to Nikol Ježková: Doctrine2 Behavioral Extensions - zaostřeno na stromy

Got bored by the relational database? Switch to a RDF store!
Got bored by the relational database? Switch to a RDF store!Got bored by the relational database? Switch to a RDF store!
Got bored by the relational database? Switch to a RDF store!
benfante
 
Building Content Types with Dexterity
Building Content Types with DexterityBuilding Content Types with Dexterity
Building Content Types with Dexterity
David Glick
 
2018 05-11 the way we teach tech - phpday
2018 05-11 the way we teach tech - phpday2018 05-11 the way we teach tech - phpday
2018 05-11 the way we teach tech - phpday
Jeroen van der Gulik
 
Managing multiple environments with Ansible
Managing multiple environments with AnsibleManaging multiple environments with Ansible
Managing multiple environments with Ansible
jtyr
 
Inside DocBlox
Inside DocBloxInside DocBlox
Inside DocBlox
Mike van Riel
 
Integrity and Security in Filesystems
Integrity and Security in FilesystemsIntegrity and Security in Filesystems
Integrity and Security in Filesystems
Conferencias FIST
 

Similar to Nikol Ježková: Doctrine2 Behavioral Extensions - zaostřeno na stromy (6)

Got bored by the relational database? Switch to a RDF store!
Got bored by the relational database? Switch to a RDF store!Got bored by the relational database? Switch to a RDF store!
Got bored by the relational database? Switch to a RDF store!
 
Building Content Types with Dexterity
Building Content Types with DexterityBuilding Content Types with Dexterity
Building Content Types with Dexterity
 
2018 05-11 the way we teach tech - phpday
2018 05-11 the way we teach tech - phpday2018 05-11 the way we teach tech - phpday
2018 05-11 the way we teach tech - phpday
 
Managing multiple environments with Ansible
Managing multiple environments with AnsibleManaging multiple environments with Ansible
Managing multiple environments with Ansible
 
Inside DocBlox
Inside DocBloxInside DocBlox
Inside DocBlox
 
Integrity and Security in Filesystems
Integrity and Security in FilesystemsIntegrity and Security in Filesystems
Integrity and Security in Filesystems
 

More from Konference PHPlive

Dušan Kasan - Zrefaktoruj cykly na kolekce
Dušan Kasan - Zrefaktoruj cykly na kolekceDušan Kasan - Zrefaktoruj cykly na kolekce
Dušan Kasan - Zrefaktoruj cykly na kolekce
Konference PHPlive
 
Miro Stopka – Kvalitní vs. výnosný kód
Miro Stopka – Kvalitní vs. výnosný kódMiro Stopka – Kvalitní vs. výnosný kód
Miro Stopka – Kvalitní vs. výnosný kód
Konference PHPlive
 
Tomáš Votruba – Jako Vinnetou a Old Shatterhand – refaktoruj nenávist v přáte...
Tomáš Votruba – Jako Vinnetou a Old Shatterhand – refaktoruj nenávist v přáte...Tomáš Votruba – Jako Vinnetou a Old Shatterhand – refaktoruj nenávist v přáte...
Tomáš Votruba – Jako Vinnetou a Old Shatterhand – refaktoruj nenávist v přáte...
Konference PHPlive
 
Petr Kadlec - Jak začít se Symfony a mít z toho dobrý pocit
Petr Kadlec - Jak začít se Symfony a mít z toho dobrý pocitPetr Kadlec - Jak začít se Symfony a mít z toho dobrý pocit
Petr Kadlec - Jak začít se Symfony a mít z toho dobrý pocit
Konference PHPlive
 
Jakub Kulhan - Jak se dělal nový Skrz.cz na Symfony a Elasticsearch
Jakub Kulhan - Jak se dělal nový Skrz.cz na Symfony a ElasticsearchJakub Kulhan - Jak se dělal nový Skrz.cz na Symfony a Elasticsearch
Jakub Kulhan - Jak se dělal nový Skrz.cz na Symfony a Elasticsearch
Konference PHPlive
 
Filip Procházka - Testování prakticky
Filip Procházka - Testování praktickyFilip Procházka - Testování prakticky
Filip Procházka - Testování prakticky
Konference PHPlive
 

More from Konference PHPlive (6)

Dušan Kasan - Zrefaktoruj cykly na kolekce
Dušan Kasan - Zrefaktoruj cykly na kolekceDušan Kasan - Zrefaktoruj cykly na kolekce
Dušan Kasan - Zrefaktoruj cykly na kolekce
 
Miro Stopka – Kvalitní vs. výnosný kód
Miro Stopka – Kvalitní vs. výnosný kódMiro Stopka – Kvalitní vs. výnosný kód
Miro Stopka – Kvalitní vs. výnosný kód
 
Tomáš Votruba – Jako Vinnetou a Old Shatterhand – refaktoruj nenávist v přáte...
Tomáš Votruba – Jako Vinnetou a Old Shatterhand – refaktoruj nenávist v přáte...Tomáš Votruba – Jako Vinnetou a Old Shatterhand – refaktoruj nenávist v přáte...
Tomáš Votruba – Jako Vinnetou a Old Shatterhand – refaktoruj nenávist v přáte...
 
Petr Kadlec - Jak začít se Symfony a mít z toho dobrý pocit
Petr Kadlec - Jak začít se Symfony a mít z toho dobrý pocitPetr Kadlec - Jak začít se Symfony a mít z toho dobrý pocit
Petr Kadlec - Jak začít se Symfony a mít z toho dobrý pocit
 
Jakub Kulhan - Jak se dělal nový Skrz.cz na Symfony a Elasticsearch
Jakub Kulhan - Jak se dělal nový Skrz.cz na Symfony a ElasticsearchJakub Kulhan - Jak se dělal nový Skrz.cz na Symfony a Elasticsearch
Jakub Kulhan - Jak se dělal nový Skrz.cz na Symfony a Elasticsearch
 
Filip Procházka - Testování prakticky
Filip Procházka - Testování praktickyFilip Procházka - Testování prakticky
Filip Procházka - Testování prakticky
 

Recently uploaded

Internet of Things in Manufacturing: Revolutionizing Efficiency & Quality | C...
Internet of Things in Manufacturing: Revolutionizing Efficiency & Quality | C...Internet of Things in Manufacturing: Revolutionizing Efficiency & Quality | C...
Internet of Things in Manufacturing: Revolutionizing Efficiency & Quality | C...
CIOWomenMagazine
 
办理新西兰奥克兰大学毕业证学位证书范本原版一模一样
办理新西兰奥克兰大学毕业证学位证书范本原版一模一样办理新西兰奥克兰大学毕业证学位证书范本原版一模一样
办理新西兰奥克兰大学毕业证学位证书范本原版一模一样
xjq03c34
 
假文凭国外(Adelaide毕业证)澳大利亚国立大学毕业证成绩单办理
假文凭国外(Adelaide毕业证)澳大利亚国立大学毕业证成绩单办理假文凭国外(Adelaide毕业证)澳大利亚国立大学毕业证成绩单办理
假文凭国外(Adelaide毕业证)澳大利亚国立大学毕业证成绩单办理
cuobya
 
重新申请毕业证书(RMIT毕业证)皇家墨尔本理工大学毕业证成绩单精仿办理
重新申请毕业证书(RMIT毕业证)皇家墨尔本理工大学毕业证成绩单精仿办理重新申请毕业证书(RMIT毕业证)皇家墨尔本理工大学毕业证成绩单精仿办理
重新申请毕业证书(RMIT毕业证)皇家墨尔本理工大学毕业证成绩单精仿办理
vmemo1
 
存档可查的(USC毕业证)南加利福尼亚大学毕业证成绩单制做办理
存档可查的(USC毕业证)南加利福尼亚大学毕业证成绩单制做办理存档可查的(USC毕业证)南加利福尼亚大学毕业证成绩单制做办理
存档可查的(USC毕业证)南加利福尼亚大学毕业证成绩单制做办理
fovkoyb
 
制作原版1:1(Monash毕业证)莫纳什大学毕业证成绩单办理假
制作原版1:1(Monash毕业证)莫纳什大学毕业证成绩单办理假制作原版1:1(Monash毕业证)莫纳什大学毕业证成绩单办理假
制作原版1:1(Monash毕业证)莫纳什大学毕业证成绩单办理假
ukwwuq
 
成绩单ps(UST毕业证)圣托马斯大学毕业证成绩单快速办理
成绩单ps(UST毕业证)圣托马斯大学毕业证成绩单快速办理成绩单ps(UST毕业证)圣托马斯大学毕业证成绩单快速办理
成绩单ps(UST毕业证)圣托马斯大学毕业证成绩单快速办理
ysasp1
 
制作毕业证书(ANU毕业证)莫纳什大学毕业证成绩单官方原版办理
制作毕业证书(ANU毕业证)莫纳什大学毕业证成绩单官方原版办理制作毕业证书(ANU毕业证)莫纳什大学毕业证成绩单官方原版办理
制作毕业证书(ANU毕业证)莫纳什大学毕业证成绩单官方原版办理
cuobya
 
一比一原版(SLU毕业证)圣路易斯大学毕业证成绩单专业办理
一比一原版(SLU毕业证)圣路易斯大学毕业证成绩单专业办理一比一原版(SLU毕业证)圣路易斯大学毕业证成绩单专业办理
一比一原版(SLU毕业证)圣路易斯大学毕业证成绩单专业办理
keoku
 
7 Best Cloud Hosting Services to Try Out in 2024
7 Best Cloud Hosting Services to Try Out in 20247 Best Cloud Hosting Services to Try Out in 2024
7 Best Cloud Hosting Services to Try Out in 2024
Danica Gill
 
一比一原版(CSU毕业证)加利福尼亚州立大学毕业证成绩单专业办理
一比一原版(CSU毕业证)加利福尼亚州立大学毕业证成绩单专业办理一比一原版(CSU毕业证)加利福尼亚州立大学毕业证成绩单专业办理
一比一原版(CSU毕业证)加利福尼亚州立大学毕业证成绩单专业办理
ufdana
 
[HUN][hackersuli] Red Teaming alapok 2024
[HUN][hackersuli] Red Teaming alapok 2024[HUN][hackersuli] Red Teaming alapok 2024
[HUN][hackersuli] Red Teaming alapok 2024
hackersuli
 
学位认证网(DU毕业证)迪肯大学毕业证成绩单一比一原版制作
学位认证网(DU毕业证)迪肯大学毕业证成绩单一比一原版制作学位认证网(DU毕业证)迪肯大学毕业证成绩单一比一原版制作
学位认证网(DU毕业证)迪肯大学毕业证成绩单一比一原版制作
zyfovom
 
留学挂科(UofM毕业证)明尼苏达大学毕业证成绩单复刻办理
留学挂科(UofM毕业证)明尼苏达大学毕业证成绩单复刻办理留学挂科(UofM毕业证)明尼苏达大学毕业证成绩单复刻办理
留学挂科(UofM毕业证)明尼苏达大学毕业证成绩单复刻办理
uehowe
 
Explore-Insanony: Watch Instagram Stories Secretly
Explore-Insanony: Watch Instagram Stories SecretlyExplore-Insanony: Watch Instagram Stories Secretly
Explore-Insanony: Watch Instagram Stories Secretly
Trending Blogers
 
Ready to Unlock the Power of Blockchain!
Ready to Unlock the Power of Blockchain!Ready to Unlock the Power of Blockchain!
Ready to Unlock the Power of Blockchain!
Toptal Tech
 
Gen Z and the marketplaces - let's translate their needs
Gen Z and the marketplaces - let's translate their needsGen Z and the marketplaces - let's translate their needs
Gen Z and the marketplaces - let's translate their needs
Laura Szabó
 
办理毕业证(UPenn毕业证)宾夕法尼亚大学毕业证成绩单快速办理
办理毕业证(UPenn毕业证)宾夕法尼亚大学毕业证成绩单快速办理办理毕业证(UPenn毕业证)宾夕法尼亚大学毕业证成绩单快速办理
办理毕业证(UPenn毕业证)宾夕法尼亚大学毕业证成绩单快速办理
uehowe
 
不能毕业如何获得(USYD毕业证)悉尼大学毕业证成绩单一比一原版制作
不能毕业如何获得(USYD毕业证)悉尼大学毕业证成绩单一比一原版制作不能毕业如何获得(USYD毕业证)悉尼大学毕业证成绩单一比一原版制作
不能毕业如何获得(USYD毕业证)悉尼大学毕业证成绩单一比一原版制作
bseovas
 
留学学历(UoA毕业证)奥克兰大学毕业证成绩单官方原版办理
留学学历(UoA毕业证)奥克兰大学毕业证成绩单官方原版办理留学学历(UoA毕业证)奥克兰大学毕业证成绩单官方原版办理
留学学历(UoA毕业证)奥克兰大学毕业证成绩单官方原版办理
bseovas
 

Recently uploaded (20)

Internet of Things in Manufacturing: Revolutionizing Efficiency & Quality | C...
Internet of Things in Manufacturing: Revolutionizing Efficiency & Quality | C...Internet of Things in Manufacturing: Revolutionizing Efficiency & Quality | C...
Internet of Things in Manufacturing: Revolutionizing Efficiency & Quality | C...
 
办理新西兰奥克兰大学毕业证学位证书范本原版一模一样
办理新西兰奥克兰大学毕业证学位证书范本原版一模一样办理新西兰奥克兰大学毕业证学位证书范本原版一模一样
办理新西兰奥克兰大学毕业证学位证书范本原版一模一样
 
假文凭国外(Adelaide毕业证)澳大利亚国立大学毕业证成绩单办理
假文凭国外(Adelaide毕业证)澳大利亚国立大学毕业证成绩单办理假文凭国外(Adelaide毕业证)澳大利亚国立大学毕业证成绩单办理
假文凭国外(Adelaide毕业证)澳大利亚国立大学毕业证成绩单办理
 
重新申请毕业证书(RMIT毕业证)皇家墨尔本理工大学毕业证成绩单精仿办理
重新申请毕业证书(RMIT毕业证)皇家墨尔本理工大学毕业证成绩单精仿办理重新申请毕业证书(RMIT毕业证)皇家墨尔本理工大学毕业证成绩单精仿办理
重新申请毕业证书(RMIT毕业证)皇家墨尔本理工大学毕业证成绩单精仿办理
 
存档可查的(USC毕业证)南加利福尼亚大学毕业证成绩单制做办理
存档可查的(USC毕业证)南加利福尼亚大学毕业证成绩单制做办理存档可查的(USC毕业证)南加利福尼亚大学毕业证成绩单制做办理
存档可查的(USC毕业证)南加利福尼亚大学毕业证成绩单制做办理
 
制作原版1:1(Monash毕业证)莫纳什大学毕业证成绩单办理假
制作原版1:1(Monash毕业证)莫纳什大学毕业证成绩单办理假制作原版1:1(Monash毕业证)莫纳什大学毕业证成绩单办理假
制作原版1:1(Monash毕业证)莫纳什大学毕业证成绩单办理假
 
成绩单ps(UST毕业证)圣托马斯大学毕业证成绩单快速办理
成绩单ps(UST毕业证)圣托马斯大学毕业证成绩单快速办理成绩单ps(UST毕业证)圣托马斯大学毕业证成绩单快速办理
成绩单ps(UST毕业证)圣托马斯大学毕业证成绩单快速办理
 
制作毕业证书(ANU毕业证)莫纳什大学毕业证成绩单官方原版办理
制作毕业证书(ANU毕业证)莫纳什大学毕业证成绩单官方原版办理制作毕业证书(ANU毕业证)莫纳什大学毕业证成绩单官方原版办理
制作毕业证书(ANU毕业证)莫纳什大学毕业证成绩单官方原版办理
 
一比一原版(SLU毕业证)圣路易斯大学毕业证成绩单专业办理
一比一原版(SLU毕业证)圣路易斯大学毕业证成绩单专业办理一比一原版(SLU毕业证)圣路易斯大学毕业证成绩单专业办理
一比一原版(SLU毕业证)圣路易斯大学毕业证成绩单专业办理
 
7 Best Cloud Hosting Services to Try Out in 2024
7 Best Cloud Hosting Services to Try Out in 20247 Best Cloud Hosting Services to Try Out in 2024
7 Best Cloud Hosting Services to Try Out in 2024
 
一比一原版(CSU毕业证)加利福尼亚州立大学毕业证成绩单专业办理
一比一原版(CSU毕业证)加利福尼亚州立大学毕业证成绩单专业办理一比一原版(CSU毕业证)加利福尼亚州立大学毕业证成绩单专业办理
一比一原版(CSU毕业证)加利福尼亚州立大学毕业证成绩单专业办理
 
[HUN][hackersuli] Red Teaming alapok 2024
[HUN][hackersuli] Red Teaming alapok 2024[HUN][hackersuli] Red Teaming alapok 2024
[HUN][hackersuli] Red Teaming alapok 2024
 
学位认证网(DU毕业证)迪肯大学毕业证成绩单一比一原版制作
学位认证网(DU毕业证)迪肯大学毕业证成绩单一比一原版制作学位认证网(DU毕业证)迪肯大学毕业证成绩单一比一原版制作
学位认证网(DU毕业证)迪肯大学毕业证成绩单一比一原版制作
 
留学挂科(UofM毕业证)明尼苏达大学毕业证成绩单复刻办理
留学挂科(UofM毕业证)明尼苏达大学毕业证成绩单复刻办理留学挂科(UofM毕业证)明尼苏达大学毕业证成绩单复刻办理
留学挂科(UofM毕业证)明尼苏达大学毕业证成绩单复刻办理
 
Explore-Insanony: Watch Instagram Stories Secretly
Explore-Insanony: Watch Instagram Stories SecretlyExplore-Insanony: Watch Instagram Stories Secretly
Explore-Insanony: Watch Instagram Stories Secretly
 
Ready to Unlock the Power of Blockchain!
Ready to Unlock the Power of Blockchain!Ready to Unlock the Power of Blockchain!
Ready to Unlock the Power of Blockchain!
 
Gen Z and the marketplaces - let's translate their needs
Gen Z and the marketplaces - let's translate their needsGen Z and the marketplaces - let's translate their needs
Gen Z and the marketplaces - let's translate their needs
 
办理毕业证(UPenn毕业证)宾夕法尼亚大学毕业证成绩单快速办理
办理毕业证(UPenn毕业证)宾夕法尼亚大学毕业证成绩单快速办理办理毕业证(UPenn毕业证)宾夕法尼亚大学毕业证成绩单快速办理
办理毕业证(UPenn毕业证)宾夕法尼亚大学毕业证成绩单快速办理
 
不能毕业如何获得(USYD毕业证)悉尼大学毕业证成绩单一比一原版制作
不能毕业如何获得(USYD毕业证)悉尼大学毕业证成绩单一比一原版制作不能毕业如何获得(USYD毕业证)悉尼大学毕业证成绩单一比一原版制作
不能毕业如何获得(USYD毕业证)悉尼大学毕业证成绩单一比一原版制作
 
留学学历(UoA毕业证)奥克兰大学毕业证成绩单官方原版办理
留学学历(UoA毕业证)奥克兰大学毕业证成绩单官方原版办理留学学历(UoA毕业证)奥克兰大学毕业证成绩单官方原版办理
留学学历(UoA毕业证)奥克兰大学毕业证成绩单官方原版办理
 

Nikol Ježková: Doctrine2 Behavioral Extensions - zaostřeno na stromy