nikol ježková: doctrine2 behavioral extensions - zaostřeno na stromy
TRANSCRIPT
![Page 1: Nikol Ježková: Doctrine2 Behavioral Extensions - zaostřeno na stromy](https://reader031.vdocuments.site/reader031/viewer/2022021815/5899c6891a28ab45548b623b/html5/thumbnails/1.jpg)
Doctrine2 Behaviour Extensionszaostřeno na stromy
Nikol Ježková
![Page 2: Nikol Ježková: Doctrine2 Behavioral Extensions - zaostřeno na stromy](https://reader031.vdocuments.site/reader031/viewer/2022021815/5899c6891a28ab45548b623b/html5/thumbnails/2.jpg)
![Page 3: Nikol Ježková: Doctrine2 Behavioral Extensions - zaostřeno na stromy](https://reader031.vdocuments.site/reader031/viewer/2022021815/5899c6891a28ab45548b623b/html5/thumbnails/3.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022021815/5899c6891a28ab45548b623b/html5/thumbnails/4.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022021815/5899c6891a28ab45548b623b/html5/thumbnails/5.jpg)
ListenersTranslationTreeSluggableTimestampable
...
onFlush
EntityManager
Entita
AnnotaceXMLYAML
EventManager
Doctrine Event System
mapování
![Page 6: Nikol Ježková: Doctrine2 Behavioral Extensions - zaostřeno na stromy](https://reader031.vdocuments.site/reader031/viewer/2022021815/5899c6891a28ab45548b623b/html5/thumbnails/6.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022021815/5899c6891a28ab45548b623b/html5/thumbnails/7.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022021815/5899c6891a28ab45548b623b/html5/thumbnails/8.jpg)
@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](https://reader031.vdocuments.site/reader031/viewer/2022021815/5899c6891a28ab45548b623b/html5/thumbnails/9.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022021815/5899c6891a28ab45548b623b/html5/thumbnails/10.jpg)
@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](https://reader031.vdocuments.site/reader031/viewer/2022021815/5899c6891a28ab45548b623b/html5/thumbnails/11.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022021815/5899c6891a28ab45548b623b/html5/thumbnails/12.jpg)
@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](https://reader031.vdocuments.site/reader031/viewer/2022021815/5899c6891a28ab45548b623b/html5/thumbnails/13.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022021815/5899c6891a28ab45548b623b/html5/thumbnails/14.jpg)
![Page 15: Nikol Ježková: Doctrine2 Behavioral Extensions - zaostřeno na stromy](https://reader031.vdocuments.site/reader031/viewer/2022021815/5899c6891a28ab45548b623b/html5/thumbnails/15.jpg)
@Gedmo\Uploadable
UploadableListener, interface Uploadable
![Page 16: Nikol Ježková: Doctrine2 Behavioral Extensions - zaostřeno na stromy](https://reader031.vdocuments.site/reader031/viewer/2022021815/5899c6891a28ab45548b623b/html5/thumbnails/16.jpg)
@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](https://reader031.vdocuments.site/reader031/viewer/2022021815/5899c6891a28ab45548b623b/html5/thumbnails/17.jpg)
Translatable
TranslatableListener
@Gedmo\Translatable
@Gedmo\Locale
TranslationRepository
![Page 18: Nikol Ježková: Doctrine2 Behavioral Extensions - zaostřeno na stromy](https://reader031.vdocuments.site/reader031/viewer/2022021815/5899c6891a28ab45548b623b/html5/thumbnails/18.jpg)
Entita Listener
@Gedmo\Locale@Gedmo\Translatable
setLocale
$defaultLocale
$locale
![Page 19: Nikol Ježková: Doctrine2 Behavioral Extensions - zaostřeno na stromy](https://reader031.vdocuments.site/reader031/viewer/2022021815/5899c6891a28ab45548b623b/html5/thumbnails/19.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022021815/5899c6891a28ab45548b623b/html5/thumbnails/20.jpg)
@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](https://reader031.vdocuments.site/reader031/viewer/2022021815/5899c6891a28ab45548b623b/html5/thumbnails/21.jpg)
@Gedmo\SlugHandler
● class: RelativeSlugHandler
● options
– relationField
– relationSlugField
● class: TreeSlugHandler
● options
– parentRelationField
– relationSlugField
![Page 22: Nikol Ježková: Doctrine2 Behavioral Extensions - zaostřeno na stromy](https://reader031.vdocuments.site/reader031/viewer/2022021815/5899c6891a28ab45548b623b/html5/thumbnails/22.jpg)
@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](https://reader031.vdocuments.site/reader031/viewer/2022021815/5899c6891a28ab45548b623b/html5/thumbnails/23.jpg)
@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](https://reader031.vdocuments.site/reader031/viewer/2022021815/5899c6891a28ab45548b623b/html5/thumbnails/24.jpg)
@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](https://reader031.vdocuments.site/reader031/viewer/2022021815/5899c6891a28ab45548b623b/html5/thumbnails/25.jpg)
@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](https://reader031.vdocuments.site/reader031/viewer/2022021815/5899c6891a28ab45548b623b/html5/thumbnails/26.jpg)
@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](https://reader031.vdocuments.site/reader031/viewer/2022021815/5899c6891a28ab45548b623b/html5/thumbnails/27.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022021815/5899c6891a28ab45548b623b/html5/thumbnails/28.jpg)
References, ReferenceIntegrity
entity
entity
ReferencesListener
ReferenceIntegrityListener
![Page 29: Nikol Ježková: Doctrine2 Behavioral Extensions - zaostřeno na stromy](https://reader031.vdocuments.site/reader031/viewer/2022021815/5899c6891a28ab45548b623b/html5/thumbnails/29.jpg)
● 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](https://reader031.vdocuments.site/reader031/viewer/2022021815/5899c6891a28ab45548b623b/html5/thumbnails/30.jpg)
● Kdyby/Doctrine● rixxi/gedmo
laravel-doctrine/extensions
![Page 31: Nikol Ježková: Doctrine2 Behavioral Extensions - zaostřeno na stromy](https://reader031.vdocuments.site/reader031/viewer/2022021815/5899c6891a28ab45548b623b/html5/thumbnails/31.jpg)
● 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](https://reader031.vdocuments.site/reader031/viewer/2022021815/5899c6891a28ab45548b623b/html5/thumbnails/32.jpg)
Děkuji za pozornost :-)