Symfony CMF experiences

39
Een Open Source Online Management System op basis van het Symfony2 CMF

description

Symfony Based Online Management System based on Symfony CMF

Transcript of Symfony CMF experiences

Page 1: Symfony CMF experiences

Een Open Source Online Management System op basis van het Symfony2 CMF

Page 2: Symfony CMF experiences

Wie ben ik

Voorliefde voor:● Architectuur● UML● Agile

Page 3: Symfony CMF experiences

Deze presentatie

● Hoe zijn we tot een nieuw CMS gekomen gebaseerd op het Symfony CMF

● Uitleg over wat Symfony CMF is● Implementatieproblemen● Roadmap

Page 4: Symfony CMF experiences

Hoe zijn we gekomen tot een nieuw CMS

Page 5: Symfony CMF experiences

Monolithische systemen

● One size fits all syndroom● Beoogt gebruiksklaar product te zijn● Uitzonderingen en maatwerk worden

standaard

Page 6: Symfony CMF experiences

Monolithische systemen

● One size fits all syndroom● Beoogt gebruiksklaar product te zijn● Uitzonderingen en maatwerk worden

standaard

Bugfixes in core

Page 7: Symfony CMF experiences

Plugin/module systemen

● Maatwerk loskoppelen van core● Nog steeds monolitisch● Simplistische plugin architectuur of veel

dependencies van core

Page 8: Symfony CMF experiences

Plugin/module systemen

● Maatwerk loskoppelen van core● Nog steeds monolitisch● Simplistische plugin architectuur of veel

dependencies van core

Making patches

Page 9: Symfony CMF experiences

Groeiende architectuur behoefte

Bron: Automatiseringsgids 22 (6-12-2012) – Gevraagd nieuwe Agile IT-principesBron: Automatiseringsgids 22 (6-12-2012) – Gevraagd nieuwe Agile IT-principes

Page 10: Symfony CMF experiences

Groeiende architectuur behoefte

Bron: Automatiseringsgids 22 (6-12-2012) – Gevraagd nieuwe Agile IT-principesBron: Automatiseringsgids 22 (6-12-2012) – Gevraagd nieuwe Agile IT-principes

Page 11: Symfony CMF experiences

Doelstelling van nieuw CMS

Schaalbare oplossing

+ Open source

+ Ruimte voor maatwerk

+ Archipel principes

+ Uitgebreide standaard voor module/plugin architectuur

Page 12: Symfony CMF experiences

Doelstelling van nieuw CMS

Schaalbare oplossing

+ Open source

+ Ruimte voor maatwerk

+ Archipel principes

+ Uitgebreide standaard voor module/plugin architectuur

= Symfony2

Page 13: Symfony CMF experiences

Een CMS op Symfony 2

● Functionele verantwoordelijkheden opdelen in zelfstandige functionerende “eilandjes van code”

● Aan elkaar koppelen dmv de Symfony2 DIC

Page 14: Symfony CMF experiences
Page 15: Symfony CMF experiences

Symfony CMF

Content management framework,

not content management system● Use what you can● Replace what you need● Ignore what you do not need● Collection of modular tools to do content

management● Not a ready-to-use application for end users

Page 16: Symfony CMF experiences

Symfony CMF

● PHPCR (gebaseerd op JCR 2)– NoSQL

– Graph DB (Tree structures)

– Versioning van content

– Full text search

– Rechtenbeheer * (not yet)

Page 17: Symfony CMF experiences

Symfony CMF - PHPCR

● Drie hiërarchise bomen die je terug kunt vinden in CMF

Content Menu Routing

Page 18: Symfony CMF experiences

Symfony CMF

● Symfony 2 control flow

Page 19: Symfony CMF experiences

Symfony CMF

● Symfony 2 control flow

Page 20: Symfony CMF experiences

Symfony CMF

Page 21: Symfony CMF experiences

Symfony CMF - Content● Class - controller mapping in config.yml● Class - template mapping in config.yml● Hiërarchische dependencies

– Selectie/verwijderen (bijv blogpost → comments)

– Houd rekening met rechten

– Voorkom te diepe nesting (user → blogposts → comments)

Content Menu Routing

Page 22: Symfony CMF experiences

Implementatie

Page 23: Symfony CMF experiences

Data models en bundles

● Interfaces gebruiken om functionaliteit toe te voegen aan models (beter PHP 5.4 traits)– Doctrine Listeners op deze interfaces zetten voor

CRUD acties

– Sonata Admin extensions om forms uit te breiden (compiler pass van sonata)

– Dmv traits properties toevoegen

Page 24: Symfony CMF experiences

Voorbeeld

class Page implements SeoInterface, CallToActionInterface{

   protected $metaTitle;

   protected $metaDescription;

   protected $callToActions; ...

PageBundle, SeoBundle en CallToActionBundle

Page 25: Symfony CMF experiences

Node path generator

/**

 * @PHPCRODM\Document(referenceable=true)

 * @OMS\NodeNameCompiler(    class="PropertyNodeNameCompiler",    options={"pattern"="[title]"},    basePath="pages/landingpage")

 */

class LandingPage extends Page {...

Page 26: Symfony CMF experiences

Route generator

/**

 * @PHPCRODM\Document(referenceable=true)

 * @ROUTING\Routing(      routeName="[title]",      basepath="product"   )

 */

class Product extends Page {...

Page 27: Symfony CMF experiences

Route collection per document

● Auto route ( meeveranderende route op basis van bijv titel )

● Primary route ( intial route, aka permalink)● Default route (welke route gebruikt moet

worden, bijv bij menu)● Redirect route(s) (alle andere routes dan

default route)

Page 28: Symfony CMF experiences

Referential integrity

Page 29: Symfony CMF experiences

Zelf bouwen

● Path generator (mkdir -p)● Path validation● Sonata phpcr admin uitbreidingen● Multi site router

Page 30: Symfony CMF experiences

Implementatieproblemen

Page 31: Symfony CMF experiences

Menu is geen menu

● Menu is geen menu– Menu,

– Kruimelpad

– Sitemap

Content Menu Routing

Page 32: Symfony CMF experiences

Routing concept => nok

http://candystore.com/chocolate/m-and-ms● Object conversions● Chocolate is node en chocolate moet een link

worden● Of hele link moet een redirect worden naar

http://m-and-ms.com

Object conversions tricky in PHPCR, en groot riscico bij verwijderen/wijzigen van tussenliggende nodes

Page 33: Symfony CMF experiences

PHPCR / Jackalope● Document caching gebeurt zowel in Doctrine

ODM als in Jackalope PHPCR● Validation van nodenames ontbreekt● Referential integrity ontbreekt

Page 34: Symfony CMF experiences

Innovatie risico

● Bugs en (deels) ongeteste code● Sonata niet “af” genoeg voor phpcr● Layout van Sonata● Zie mailinglist cmf-devs

Page 35: Symfony CMF experiences

● Jackrabbit explorer

http://blog.netvlies.nl/techniek-code/phpcr-repository-admin/

Page 36: Symfony CMF experiences

Screenshots

Page 37: Symfony CMF experiences

Screenshots

Page 38: Symfony CMF experiences

Roadmap

● PR's voor reeds gebouwde functionaliteit● SOMS sandbox release● Meer mensen inspireren tot gebruik van CMF

Page 39: Symfony CMF experiences

Waar te beginnen

● cmf.symfony.com● Join mailinglist● Download sandbox