Upload
jerome-vieilledent
View
1.430
Download
1
Tags:
Embed Size (px)
DESCRIPTION
Insight of eZ Publish 5 from eZ engineers (integration with Symfony2/Twig, Public API, REST API, ...)
Citation preview
eZ#Publish#5#in-depth#inspec2on#Insights(from(eZ(Engineers
Overview
1. Glossary2. Structure
1. Git2. Directories, where is the stuff ?
3. eZ Publish Symfony integration1. New template engine2. eZ Publish 5 Symfony code3. Legacy fallback
4. Public API (“PAPI”)5. REST
1. Spec2. Demo!
! 10/18/12! Presenter: eZ Engineering
Glossary: 4.x -> 5.x
3
(Content) object Content
(Content) class Content Type
(Content) attribute Field
(Content) class attribute Field Definition
Data type Field Type
Node Location
(Content) class group Content Type Group
As one of the first things we defined slightly new names for existing concepts in eZ Publish to move closer to what end users, and what other systems out there where using
Mainly to make sure we can introduce less technical terms at high level as well as low level to make sure everyone eventually speaks the same simplified domain language Also this was done to lower the barrier of entry for new users and developers
! 10/18/12! Presenter: eZ Engineering
Glossary: 4.x -> 5.x
4
Module Controller
Module view Controller action (method)
Fetch Sub request (render)
Template operator filter + function
Template function tag
Extension Bundle
ObjectState ObjectState
- Template operators, all basic operations are covered by twig example later
eZ Publish 5 Structure
! 10/18/12! Presenter: eZ Engineering 6
eZ Publish 5 Structure: GIT organization ATM
eZ Publish 5.x meta repository which uses composer to get everything else:− https://github.com/ezsystems/ezpublish5
− eZ Publish 5.x API:https://github.com/ezsystems/ezp-next
− eZ Publish 4.x “LS” repository:https://github.com/ezsystems/ezpublish
The meta is purely to pull in all dependencies to create a full eZ Publish 5 installation using composerNext slide will drill down eZ Publish 5.x meta repository
! 10/18/12! Presenter: eZ Engineering
eZ Publish 5 Structure: ezsystems/ezpublish5
app ezpublish_legacy
src <your custom bundles>
vendor ezsystems− ezpublish
symfony twig zetacomponents
web7
app is project config, cache and logsCurrently contains eZ Publish 4.x, and your custom config
src is project code filesCurrently contains eZ Demo Design bundle, but this will be moved out
vendor is a folder created by composer when executed as mentioned in Readme.md, will contain all project dependencies
ezsystems/ezpublish is what was referred to as ezp-next on previous slide web is folder for everything that should be reachable from the web, aka public folder
eZ Publish 5 Symfony integration
! 10/18/12! Presenter: eZ Engineering
eZ Publish 5 Symfony Integration: Templates
9
From:
! 10/18/12! Presenter: eZ Engineering
eZ Publish 5 Symfony Integration: Templates
10
To:
Backwards Compatibility
*Knock knock*devs: «Who's there ?»«PM»devs: «PM who ?»«PM who wants
to talk about BC»devs: «Oh crap...»
Then the trouble began. We could have picked any other choice, the same problem would have come anyway.
BC: The challenge
• 100% data compatible (same database schema)
• Include legacy templates in new ones
• Routing fallback
• Load legacy content templates with legacy rules
• Settings
• Access Symfony services from legacy modules
Data compatible : The most important. One can easily switch from a legacy eZ Publish instance to 5.0
BC: The challenge
BC: The challenge
PM SCRUM Story:
«As an eZ Publish user, I don’t want to be pissed off by a new #@!$% version!»
eZ Publish 3 use case (2003). Major change => eZ Publish lost the 2/3rd of its users, community members... Because there was no BC at all.
BC: The challenge
Challenge accepted
Obviously we didn’t have choice...It was basically trying to make a square fit inside a smaller triangle.2 completely different systems, with 2 completely different approaches.
We got inspired of what guys from the Symfony community made when Symfony 2 came out, to make their Symfony 1 application work with it.
BC: The challenge
Sandbox Legacy code
...in a \Closure !
Code speaks like a thousand words
BC: The challenge
So yes of course, we needed to refactor a lot the old kernel (esp. the old front index.php and reduce it from 1.000+ lines to a dozen.Using runCallback, legacy code is completely isolated. We can keep high cohesion and loose coupling. Of course it adds some overhead, but it’s fairly minimal from what it represents.
This is the central feature on top of which we built all the requirements asked. And guess what ? It works !
BC: Icing on the cake
eZ Publish legacy still works independently !
eZ Publish 5 Public API
! 10/18/12! Presenter: eZ Engineering
eZ Publish 5 Public API: Structure
20
doceZ
Publish− API
− Core
− SPI
settingsvendor
settings is something you can create to override public API settings at the moment, this is done by creating file settings/override/service.ini
vendor is a folder created by composer when executed as mentioned in Readme.md API is what you will use when coding against eZ Publish 5 Core is the implementation of xPI interfaces bundled with the “kernel”, this is only interesting if you
want to see how implementation is done, in day to day API use you only need to know API SPI are the interfaces you can use when you want to extend eZ Publish, the handlers to use 4.x
terms
Next slide will drill down into the [Public] API
! 10/18/12! Presenter: eZ Engineering
eZ Publish 5 Public API: Use in DemoBundle
21
eZ Publish 5 REST API
2424
Fin
Twitter : @jvieilledent, @dpobel, @andrerom, @patrick_allaert, @bdunogier
https://joind.in/7525