+ All Categories
Home > Internet > Nikol Ježková: Doctrine2 Behavioral Extensions - zaostřeno na stromy

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

Date post: 13-Apr-2017
Category:
Upload: konference-phplive
View: 72 times
Download: 0 times
Share this document with a friend
32
Doctrine2 Behaviour Extensions zaostřeno na stromy Nikol Ježková
Transcript
Page 1: Nikol Ježková: Doctrine2 Behavioral Extensions - zaostřeno na stromy

Doctrine2 Behaviour Extensionszaostřeno na stromy

Nikol Ježková

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

Doctrine2 Behaviour Extensions

● Tree

● Translatable

● Sluggable

● Uploadable

● Loggable

● Sortable

● Timestampable

● IpTraceable

● Blameable

● SoftDeletable

● References

● ReferenceIntegrity

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

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

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

ListenersTranslationTreeSluggableTimestampable

...

onFlush

EntityManager

Entita

AnnotaceXMLYAML

EventManager

Doctrine Event System

mapování

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

Hierarchická data

Nested-Set chování

@Gedmo\Tree

\Gedmo\Tree\TreeListener

type [Nested-set, Closure-table, Materialized-path]

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

level1

2

3

parent

parent

child child

child child

parent

child

Nested-Set behaviour

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

@Gedmo\TreeLevel 1 12

5 63 4 9 10

2 7 8 11

@Gedmo\Tree(type="nested")

1

2

3

@Gedmo\TreeLeft @Gedmo\TreeRight

@Gedmo\TreeParent

1

2 3

use Gedmo\Mapping\Annotation as Gedmo;

trait NestedSetEntity

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

getRootNodes

getPath

getChildren

getLeafs

getNextSiblings

getPrevSiblings

getNodesHierarchy

moveUp

moveDown

NestedTreeRepository

persistAsFirstChild

persistAsFirstChildOf

persistAsLastChild

persistAsLastChildOf

persistAsNextSibling

persistAsNextSiblingOf

persistAsPrevSibling

persistAsPrevSiblingOf

removeFromTree

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

@Gedmo\TreeLevel

@Gedmo\TreeParent

@Gedmo\TreePath

@Gedmo\TreePathSource

@Gedmo\Tree(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

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

MaterializedPathRepository

getRootNodes [Query / QueryBuilder]

getPath [Query / QueryBuilder]

getNodesHierarchy [Query / QueryBuilder]

getTree [Query / QueryBuilder]

getChildren [Query / QueryBuilder]

childrenHierarchy

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

@Gedmo\TreeLevel

@Gedmo\TreeParent

addClosure

@Gedmo\Tree(type="closure")@Gedmo\TreeClosure(class="ClosureEntity")

ClosureTreeRepository

ancestor descendant depth

ClosureEntity extends AbstractClosure Entity

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

ClosureTreeRepository

getRootNodes [Query / QueryBuilder]

getPath [Query / QueryBuilder]

getNodesHierarchy [Query / QueryBuilder]

getTree [Query / QueryBuilder]

getChildren [Query / QueryBuilder]

childrenHierarchy

removeFromTree

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

@Gedmo\Uploadable

UploadableListener, interface Uploadable

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

@Gedmo\UploadableFilePath

@Gedmo\UploadableFileName

@Gedmo\UploadableFileMimeType

@Gedmo\UploadableFileSize

@Gedmo\Uploadable

path filenameGenerator allowOverwrite appendNumber callback

$fileinfo = $_FILES['foo'];x

$fileinfo instanceOf Uploadable\FileInfo\FileInfoArray; // UploadableListener $listener->addEntityFileInfo($file, $fileinfo);

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

Translatable

TranslatableListener

@Gedmo\Translatable

@Gedmo\Locale

TranslationRepository

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

Entita Listener

@Gedmo\Locale@Gedmo\Translatable

setLocale

$defaultLocale

$locale

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

class Article implements \Gedmo\Translatable\Translatable{ ...

$article = new \Entity\Article;$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', '\Entity\Article');

\Gedmo\Translatable\Entity\Repository\TranslationRepository

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

@Gedmo\Slug(

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'

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

@Gedmo\SlugHandler

● class: RelativeSlugHandler

● options

– relationField

– relationSlugField

● class: TreeSlugHandler

● options

– parentRelationField

– relationSlugField

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

@Gedmo\Slug( handlers={ @Gedmo\SlugHandler(

class="RelativeSlugHandler", options={ @Gedmo\SlugHandlerOption( name="relationField", value="entity" ), @Gedmo\SlugHandlerOption( name="relationSlugField", value="slug" ),

@Gedmo\SlugHandlerOption( name="separator", Value="/" )

})

}, fields={"title"})

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

@Gedmo\SortablePosition

@Gedmo\SortableGroup

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

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

@Gedmo\Timestampable● trait TimestampableEntity

@Gedmo\IpTraceable● trait IpTraceableEntity

on creatte/update/changefieldvalue

Timestampable, IpTraceable

TimestampableListener, IpTraceableListener

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

@Gedmo\Mapping\Annotation\Blameable(

on creatte/update/change

field

value

)

Blameable

BlameableListener, trait BlameableEntity

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

@Gedmo\Versioned

LogEntryRepository

->revert($entity, 1)

@Gedmo\Loggable

LoggableListener

id

action

logged_at

object_id

object_class

version

data

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

trait SoftDeleteableEntity

SoftDeleteable(fieldName="deletedAt")

SoftDeleteableFilter

SoftDeleteableFilter

enable null

disablefind

disableForEntity

enableForEntity

enable

null in DBdisabledelete

disableForEntity

enableForEntity

mark in DB

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

References, ReferenceIntegrity

entity

entity

ReferencesListener

ReferenceIntegrityListener

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

● StofDoctrineExtensionsBundle

● gedmo/doctrine-extensions

Uploadable\Stof\DoctrineExtensionsBundle\Uploadable\UploadableManager

Symfony\Component\HttpFoundation\File\UploadedFile

$manager->markEntityToUpload($file, $uploadedFile);

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

● Kdyby/Doctrine● rixxi/gedmo

laravel-doctrine/extensions

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

● Propel

nested_set, sluggable, timestampable, sortable, versionable

● Eloquent ORM [laravel]

Soft Deleting, Timestamps

● RedBeanPHP

tree

Behaviours v jiných ORM

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

Děkuji za pozornost :-)


Recommended