Upload
mdekrijger
View
578
Download
2
Embed Size (px)
DESCRIPTION
Symfony Based Online Management System based on Symfony CMF
Citation preview
Een Open Source Online Management System op basis van het Symfony2 CMF
Wie ben ik
Voorliefde voor:● Architectuur● UML● Agile
Deze presentatie
● Hoe zijn we tot een nieuw CMS gekomen gebaseerd op het Symfony CMF
● Uitleg over wat Symfony CMF is● Implementatieproblemen● Roadmap
Hoe zijn we gekomen tot een nieuw CMS
Monolithische systemen
● One size fits all syndroom● Beoogt gebruiksklaar product te zijn● Uitzonderingen en maatwerk worden
standaard
Monolithische systemen
● One size fits all syndroom● Beoogt gebruiksklaar product te zijn● Uitzonderingen en maatwerk worden
standaard
Bugfixes in core
Plugin/module systemen
● Maatwerk loskoppelen van core● Nog steeds monolitisch● Simplistische plugin architectuur of veel
dependencies van core
Plugin/module systemen
● Maatwerk loskoppelen van core● Nog steeds monolitisch● Simplistische plugin architectuur of veel
dependencies van core
Making patches
Groeiende architectuur behoefte
Bron: Automatiseringsgids 22 (6-12-2012) – Gevraagd nieuwe Agile IT-principesBron: Automatiseringsgids 22 (6-12-2012) – Gevraagd nieuwe Agile IT-principes
Groeiende architectuur behoefte
Bron: Automatiseringsgids 22 (6-12-2012) – Gevraagd nieuwe Agile IT-principesBron: Automatiseringsgids 22 (6-12-2012) – Gevraagd nieuwe Agile IT-principes
Doelstelling van nieuw CMS
Schaalbare oplossing
+ Open source
+ Ruimte voor maatwerk
+ Archipel principes
+ Uitgebreide standaard voor module/plugin architectuur
Doelstelling van nieuw CMS
Schaalbare oplossing
+ Open source
+ Ruimte voor maatwerk
+ Archipel principes
+ Uitgebreide standaard voor module/plugin architectuur
= Symfony2
Een CMS op Symfony 2
● Functionele verantwoordelijkheden opdelen in zelfstandige functionerende “eilandjes van code”
● Aan elkaar koppelen dmv de Symfony2 DIC
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
Symfony CMF
● PHPCR (gebaseerd op JCR 2)– NoSQL
– Graph DB (Tree structures)
– Versioning van content
– Full text search
– Rechtenbeheer * (not yet)
Symfony CMF - PHPCR
● Drie hiërarchise bomen die je terug kunt vinden in CMF
Content Menu Routing
Symfony CMF
● Symfony 2 control flow
Symfony CMF
● Symfony 2 control flow
Symfony CMF
●
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
Implementatie
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
Voorbeeld
class Page implements SeoInterface, CallToActionInterface{
protected $metaTitle;
protected $metaDescription;
protected $callToActions; ...
PageBundle, SeoBundle en CallToActionBundle
Node path generator
/**
* @PHPCRODM\Document(referenceable=true)
* @OMS\NodeNameCompiler( class="PropertyNodeNameCompiler", options={"pattern"="[title]"}, basePath="pages/landingpage")
*/
class LandingPage extends Page {...
Route generator
/**
* @PHPCRODM\Document(referenceable=true)
* @ROUTING\Routing( routeName="[title]", basepath="product" )
*/
class Product extends Page {...
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)
Referential integrity
Zelf bouwen
● Path generator (mkdir -p)● Path validation● Sonata phpcr admin uitbreidingen● Multi site router
Implementatieproblemen
Menu is geen menu
● Menu is geen menu– Menu,
– Kruimelpad
– Sitemap
Content Menu Routing
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
PHPCR / Jackalope● Document caching gebeurt zowel in Doctrine
ODM als in Jackalope PHPCR● Validation van nodenames ontbreekt● Referential integrity ontbreekt
Innovatie risico
● Bugs en (deels) ongeteste code● Sonata niet “af” genoeg voor phpcr● Layout van Sonata● Zie mailinglist cmf-devs
● Jackrabbit explorer
http://blog.netvlies.nl/techniek-code/phpcr-repository-admin/
Screenshots
Screenshots
Roadmap
● PR's voor reeds gebouwde functionaliteit● SOMS sandbox release● Meer mensen inspireren tot gebruik van CMF
Waar te beginnen
● cmf.symfony.com● Join mailinglist● Download sandbox