Un CMS in 25 minuti 
Come assemblare i componenti del Symfony CMF 
(e non solo) per creare qualcosa che funzioni
Un anno fa 
Un CMS in 25 ore 
e una vita per capire 
cosa ho combinato 
Come assemblare i componenti del Symfony CMF 
(e non solo) per creare qualcosa che funzioni
Un CMS in 30 sec 
SE 
Oggi 
ho capito cosa c’è dietro 
Come assemblare i componenti del Symfony CMF 
(e non solo) per creare qualcosa che funzioni
Cosa non è il CMF
Cosa è il CMF 
https://github.com/symfony-cmf
Possiamo creare cose grandi
… o meno
composer.json 
"require": { 
"symfony-cmf/symfony-cmf": "1.1.*", 
"jackalope/jackalope-doctrine-dbal": "1.1.*", 
"sonata-project/doctrine-phpcr-admin-bundle": "1.1.*", 
"sonata-project/doctrine-orm-admin-bundle": "~2.2", 
"sonata-project/media-bundle": "~2.3@dev", 
"tilleuls/ckeditor-sonata-media-bundle": "dev-master", 
"egeloen/ckeditor-bundle": “~2.0" 
}
Bundles 
! 
• CoreBundle 
• RoutingBundle 
• MenuBundle 
• TreeBrowserBundle 
• BlockBundle 
! 
• RoutingAutoBundle 
• MediaBundle 
• CreateBundle 
• SearchBundle 
• SeoBundle
Documentazione
Read the source Luke 
• ContentBundle 
• SimpleCmsBundle 
• BlogBundle
JCR 
The JSR-283 and 333 specification defines an 
API for a Content Repository (CR) 
PHPCR 
The PHP Content Repository Interfaces aims 
to provide that API in PHP
doctrine/ 
DoctrinePHPCRBundle 
doctrine/phpcr-odm 
jackalope/jackalope 
midgard/phpcr 
Doctrine PHPCR ODM 
implementation layer 
SymfonyBundle 
PHPCR 
CR JCR-like 
implementation
jackalope/jackalope-jackrabbit 
jackalope/jackalope-doctrine- 
dbal 
midgard has built-it 
transport layer 
jackalope/jackalope 
midgard/phpcr 
PHPCR Transport 
implementation 
Storage 
Jackrabbit 
MySQL, SQLite, Postgres 
MySQL, SQLite, Postgres 
PHPCR 
CR JCR-like 
implementation
Jackrabbit 
Derby 
Oracle 
MySQL 
… 
Filesystem
SfDay 2014 live webcam
Contents cms! 
contents 
primo 
tortellini 
lasagne 
tagliatelle 
secondo 
abbacchio 
bagnacauda 
casadei 
menu 
primi 
secondi 
chi-siamo 
! 
Struttura ad albero non 
solo per gli “articoli” 
ma anche per 
menu, rotte, …
Esempio di articolo con 
annotazione PHPCR
Find e remove di 
documenti
Routing
Routing 
cmf_routing:" 
chain:" 
routers_by_id:" 
router.default: 200" 
cmf_routing.dynamic_router: 100"
Routing 
cmf_routing:" 
dynamic:" 
generic_controller:oln.content.controller:contentAction" 
controllers_by_type:" 
pippo: ideato.controller:indexAction" 
controllers_by_class:" 
IdeatoMyBundleDocumentCategory:" 
" " " content.controller:categoryAction" 
IdeatoMyBundleDocumentArticle:" 
" " " content.controller:articleAction" 
templates_by_class:" 
IdeatoMyBundleDocumentPage:" 
" " " " IdeatoMyBundle:Default:content.html.twig
Menù 
• Menu e MenuNode 
• possono essere collegati a documenti 
• possono essere delle rotte di sf (comprese di 
parametri) 
• possono essere dei link verso URI
Menù 
$menusRoot = $manager->find(null, “/cms/menus");" 
$menu = new Menu();" 
$menu->setPosition($menusRoot, "main");" 
$manager->persist($menu);" 
! 
$doc = $manager->find(null, “/cms/contents/mydoc“);" 
$menuNode = new MenuNode();" 
$menuNode->setPosition($menu, $doc->getName());" 
$menuNode->setLabel($doc->getTitle());" 
$menuNode->setContent($doc);" 
$manager->persist($menu);" 
$manager->flush();
…e il backend?
Concludendo 
• CMF è maturo 
• tanti piccoli componenti riutilizzabili 
• è possibile inserirlo su progetti Sf2 già realizzati 
• documentazione 
• ideato lo utilizza su progetti reali 
• viene utilizzato da eZPublish, Drupal 8, …
Grazie!
Manuel Baldassarri! 
Partner & COO at Ideato 
! 
Twitter K3a 
eMail mb@ideato.it 
https://joind.in/talk/view/12213
• https://www.flickr.com/photos/clarkwestfield/ 
2176617708 
• https://www.flickr.com/photos/rodrigogalindez/ 
4637637337

Un CMS in 25min con Symfony CMF

  • 1.
    Un CMS in25 minuti Come assemblare i componenti del Symfony CMF (e non solo) per creare qualcosa che funzioni
  • 2.
    Un anno fa Un CMS in 25 ore e una vita per capire cosa ho combinato Come assemblare i componenti del Symfony CMF (e non solo) per creare qualcosa che funzioni
  • 3.
    Un CMS in30 sec SE Oggi ho capito cosa c’è dietro Come assemblare i componenti del Symfony CMF (e non solo) per creare qualcosa che funzioni
  • 4.
  • 5.
    Cosa è ilCMF https://github.com/symfony-cmf
  • 6.
  • 7.
  • 8.
    composer.json "require": { "symfony-cmf/symfony-cmf": "1.1.*", "jackalope/jackalope-doctrine-dbal": "1.1.*", "sonata-project/doctrine-phpcr-admin-bundle": "1.1.*", "sonata-project/doctrine-orm-admin-bundle": "~2.2", "sonata-project/media-bundle": "~2.3@dev", "tilleuls/ckeditor-sonata-media-bundle": "dev-master", "egeloen/ckeditor-bundle": “~2.0" }
  • 9.
    Bundles ! •CoreBundle • RoutingBundle • MenuBundle • TreeBrowserBundle • BlockBundle ! • RoutingAutoBundle • MediaBundle • CreateBundle • SearchBundle • SeoBundle
  • 10.
  • 12.
    Read the sourceLuke • ContentBundle • SimpleCmsBundle • BlogBundle
  • 13.
    JCR The JSR-283and 333 specification defines an API for a Content Repository (CR) PHPCR The PHP Content Repository Interfaces aims to provide that API in PHP
  • 14.
    doctrine/ DoctrinePHPCRBundle doctrine/phpcr-odm jackalope/jackalope midgard/phpcr Doctrine PHPCR ODM implementation layer SymfonyBundle PHPCR CR JCR-like implementation
  • 15.
    jackalope/jackalope-jackrabbit jackalope/jackalope-doctrine- dbal midgard has built-it transport layer jackalope/jackalope midgard/phpcr PHPCR Transport implementation Storage Jackrabbit MySQL, SQLite, Postgres MySQL, SQLite, Postgres PHPCR CR JCR-like implementation
  • 16.
    Jackrabbit Derby Oracle MySQL … Filesystem
  • 17.
  • 18.
    Contents cms! contents primo tortellini lasagne tagliatelle secondo abbacchio bagnacauda casadei menu primi secondi chi-siamo ! Struttura ad albero non solo per gli “articoli” ma anche per menu, rotte, …
  • 19.
    Esempio di articolocon annotazione PHPCR
  • 20.
    Find e removedi documenti
  • 21.
  • 22.
    Routing cmf_routing:" chain:" routers_by_id:" router.default: 200" cmf_routing.dynamic_router: 100"
  • 23.
    Routing cmf_routing:" dynamic:" generic_controller:oln.content.controller:contentAction" controllers_by_type:" pippo: ideato.controller:indexAction" controllers_by_class:" IdeatoMyBundleDocumentCategory:" " " " content.controller:categoryAction" IdeatoMyBundleDocumentArticle:" " " " content.controller:articleAction" templates_by_class:" IdeatoMyBundleDocumentPage:" " " " " IdeatoMyBundle:Default:content.html.twig
  • 24.
    Menù • Menue MenuNode • possono essere collegati a documenti • possono essere delle rotte di sf (comprese di parametri) • possono essere dei link verso URI
  • 25.
    Menù $menusRoot =$manager->find(null, “/cms/menus");" $menu = new Menu();" $menu->setPosition($menusRoot, "main");" $manager->persist($menu);" ! $doc = $manager->find(null, “/cms/contents/mydoc“);" $menuNode = new MenuNode();" $menuNode->setPosition($menu, $doc->getName());" $menuNode->setLabel($doc->getTitle());" $menuNode->setContent($doc);" $manager->persist($menu);" $manager->flush();
  • 26.
  • 30.
    Concludendo • CMFè maturo • tanti piccoli componenti riutilizzabili • è possibile inserirlo su progetti Sf2 già realizzati • documentazione • ideato lo utilizza su progetti reali • viene utilizzato da eZPublish, Drupal 8, …
  • 31.
  • 32.
    Manuel Baldassarri! Partner& COO at Ideato ! Twitter K3a eMail mb@ideato.it https://joind.in/talk/view/12213
  • 33.
    • https://www.flickr.com/photos/clarkwestfield/ 2176617708 • https://www.flickr.com/photos/rodrigogalindez/ 4637637337