SlideShare une entreprise Scribd logo
1  sur  34
Télécharger pour lire hors ligne
Migrating eZ Publish 4 extensions to eZ Publish 5
2013-04-23Presenter: Łukasz Serwatka Slide 2
Extending eZ Publish 5§
Presenter
Łukasz Serwatka
Product Management Technical Lead
lukasz.serwatka@ez.no
@lserwatka
§
Working with eZ since 1st of March 2005
§
Over 10 years of experience with eZ Publish
§
Former member of the Engineering team
§
eZ Publish & Polish PHP Community Member
§
Expert in mobile solutions (mobile applications & mobile strategies)
13-4-26Presenter: Łukasz Serwatka Slide 3
Extending eZ Publish 5§
Preparation
§
Drivers for migration (challenges, requirements) - It is very important to
understand the drivers behind a migration effort
§
Inventory of current environment - Creating a detailed summary of the
current extension portfolio really helps in terms of understanding the scope
of a migration effort
§
Migration service provider - evaluate at least a couple of migration service
providers if you do not have migration skills and staff in-house.
§
Migration effort estimate - the estimate depends on many factors such as
extension size, database complexity, components, etc. Usually provided by
the migration service provider.
§
Training requirements - Training requirements for existing development
team on the new platform need to be assessed to ensure that they can
support the new environment effectively and can participate in the migration
process if required.
13-4-26Presenter: Łukasz Serwatka Slide 4
Extending eZ Publish 5§
Preparation
§
Make in-depth analysis of the existing eZ Publish 4.x extension functionality
and code base, focusing especially on
§ External storage (custom tables)
§ Configuration (INI settings overrides)
§ CLI scripts
§ Template overrides
§ Datatypes
§ Edit handlers
§ Workflow events
§ AJAX calls
§ Translations
§ User interface (backend)
§
Carefully judge which elements can be natively implemented in eZ Publish 5
and which ones still require legacy kernel. Not all legacy features are
available in eZ Publish 5 yet, and it is an ongoing process to fill the gaps.
13-4-26Presenter: Łukasz Serwatka Slide 5
Extending eZ Publish 5§
Preparation
§
The eZ Publish 5 supported extension points at the moment:
§ FieldTypes (with custom tables)
§ Templates (view providers for Content, Location and Blocks [since eZ Publish
5.1])
§ Services (Persistence API)
§ Controllers & Actions (Routes)
§ Events (PostSiteAccessMatchEvent, PreContentViewEvent,
APIContentExceptionEvent)
− eZ/Publish/Core/MVC/Legacy/LegacyEvents.php
−
eZ/Publish/Core/MVC/Symfony/MVCEvents.php
13-4-26Presenter: Łukasz Serwatka Slide 6
Extending eZ Publish 5§
New concepts in eZ Publish 5.x
eZ Publish 4.x eZ Publish 5.x
Module Controller, extends
eZBundleEzPublishCoreBundleController
Action & View Action: the method on the Controller to
execute. View is a (Twig) template that
displays the result of the Action.
eZTemplate Twig, new template engine, new syntax
fetch() Render function, HMVC concept, a function
that enables embedding if other controller
calls
Extension Bundle in the eZ Publish 5 (Symfony2)
CLI eZ Publish 5 ezpublish/console
component for creating command line
interfaces
INI settings YAML, recommended configuration type in
eZ Publish 5
13-4-26Presenter: Łukasz Serwatka Slide 7
Extending eZ Publish 5§
Naming differences between eZ Publish 4.x and 5.x
eZ Publish 4.x eZ Publish 5.x
(Content) Class ContentType
(Content) Class Group ContentTypeGroup
(Content) Class Attribute FieldDefinition
(Content) Object Content (meta info in: ContentInfo)
(Content Object) Version VersionInfo
(Content Object) Attribute Field
(Content Object) Attribute content FieldValue
Datatype FieldType
Node Location
§
eZ Publish 5 can be extended thanks to the bundle system
§
A Bundle is a directory containing a set of files (PHP files, stylesheets,
JavaScripts, images, ...) that implement a single feature (a blog, a forum, etc)
and which can be easily shared with other developers.
§
eZ Publish 5 also provides a command line interface for generating a basic
bundle skeleton:
$ php ezpublish/console generate:bundle –namespace=eZ/TestBundle
13-4-26Presenter: Łukasz Serwatka Slide 8
Extending eZ Publish 5
13-4-26Presenter: Łukasz Serwatka Slide 9
Extending eZ Publish 5§
Bundle Directory Structure
Bundle Directory Structure Description
Controller/ contains the controllers of the bundle (e.g.
HelloController.php);
DependencyInjection/ holds certain dependency injection extension classes,
which may import service configuration
Resources/config/ houses configuration, including routing configuration
(e.g. routing.yml);
Resources/views/ holds templates organized by controller name (e.g.
Hello/index.html.twig);
Resources/public/ contains web assets (images, stylesheets, etc) and is
copied or symbolically linked into the project web/
directory via the assets:install console command;
Tests/ holds all tests for the bundle.
13-4-26Presenter: Łukasz Serwatka Slide 10
Extending eZ Publish 5§
Bundle Directory Structure – Advanced
Bundle Directory Structure Description
API/ contains the value object definitions, service
interfaces, etc. In short, public API interfaces provided
by your bundle.
Core/ holds field types implementation, persistence related
classes, repository implementations, signal-slot
implementations, etc.
SPI/ (Service Provider Interface) holds interfaces that can
contains one or several implementations around
Persistence (database), IO (file system), FieldTypes
(former DataTypes), Limitations (permissions system),
etc.
EventListeners/ holds event listeners implementation for both eZ
Publish 5 and LS
Command/ contains Console commands, each file must be
suffixed with Command.php
§
Example eZ Publish 5 Bundle architecture
13-4-26Presenter: Łukasz Serwatka Slide 11
Extending eZ Publish 5§
Bundle Directory Structure
§
File: eZTestBundle.php
<?php
Namespace eZTestBundle;
use SymfonyComponentHttpKernelBundleBundle;
class eZTestBundle extends Bundle
{
}
13-4-26Presenter: Łukasz Serwatka Slide 12
Extending eZ Publish 5§
Main Bundle Class
§
Before a Bundle can be used it has to be registered in the system.
§
With the registerBundles() method, you have total control over which bundles
are used by eZ Publish 5 (including the core Symfony bundles).
// ezpublish/EzPublishKernel.php
public function registerBundles()
{
$bundles = array(
...,
// register your bundles
new eZTestBundleeZTestBundle(),
);
// ...
return $bundles;
}
13-4-26Presenter: <enter presenter Slide 13
Extending eZ Publish 5§
Registering Bundle
§
eZ Publish 5 provides a shortcut for automatic bundle registration
php ezpublish/console generate:bundle
--namespace=eZ/TestBundle
php ezpublish/console assets:install --symlink
php ezpublish/console cache:clear
13-4-26Presenter: Łukasz Serwatka Slide 14
Extending eZ Publish 5§
Registering Bundle
§
File: eZTestBundle.php
<?php
Namespace eZTestBundle;
use SymfonyComponentHttpKernelBundleBundle;
class eZTestBundle extends Bundle
{
public function getParent()
{
return ’eZDemoBundle';
}
}
13-4-26Presenter: Łukasz Serwatka Slide 15
Extending eZ Publish 5§
Bundle Override
§
File: src/eZ/DemoBundle/Controller/MyController.php
<?php
namespace eZDemoBundleMyController;
use EzSystemsDemoBundleControllerDemoController as BaseController;
class MyController extends BaseController
{
public function footerAction( $locationId )
{
// Call parent method or completely replace its logic with your own
$response = parent::footerAction( $locationId );
// ... do custom stuff
return $response;
}
}
§
Only works if the bundle refers to the controller using the standard
EzSystemsDemoBundle:Demo:footer syntax in routes and templates
13-4-26Presenter: Łukasz Serwatka Slide 16
Extending eZ Publish 5§
Controller Override
§
File: view.html.twig
<h1>Hello</h1>
<p>I’m a Twig template!</p>
§
Created Twig template can be included as follows:
{% include ‘eZTestBundle::view.html.twig’ %}
13-4-26Presenter: Łukasz Serwatka Slide 17
Extending eZ Publish 5§
Example Twig Template
§
Legacy template include
// eZ Publish 5.0
{% ez_legacy_include "design:parts/menu.tpl" with
{"current_node_id": location.contentInfo.mainLocationId}
%}
// eZ Publish 5.1 and above
{% include "design:parts/menu.tpl" with
{"current_node_id": location.contentInfo.mainLocationId}
%}
Note that if you pass Content or a Location it will be converted to the
corresponding eZ Publish Legacy objects.
13-4-26Presenter: Łukasz Serwatka Slide 18
Extending eZ Publish 5§
Working with legacy templates
§
The best practice for extension migration regarding configuration is to keep a
compatible format
ezoe.ini
[EditorSettings]
# Skin for the editor, 'default' and 'o2k7' is included as standard
Skin=o2k7
# Lets you control alignment of toolbar buttons [left|right]
ToolbarAlign=left
parameters:
# Namespace is ezoe (INI file was ezoe.ini), scope is defined to
ezdemo_site siteaccess
ezoe.ezdemo_site.EditorSettings.Skin: o2k7
ezoe.ezdemo_site.EditorSettings.ToolbarAlign: left
13-4-26Presenter: Łukasz Serwatka Slide 19
Extending eZ Publish 5§
Working with INI settings
// Assuming that the current siteaccess is ezdemo_site
// The following code will work whether you're using the legacy extension
or the migrated one.
$resolver = $this->getConfigResolver();
$skin = $resolver->getParameter( ’EditorSettings.Skin', ’ezoe' );
$toolbarAlign= $resolver->getParameter( ’EditorSettings.ToolbarAlign',
’ezoe' );
13-4-26Presenter: Łukasz Serwatka Slide 20
Extending eZ Publish 5§
Working with INI settings
§
Datatypes are FieldTypes in eZ Publish 5
§
Extends eZPublishCoreFieldTypeFieldType class
§
Uses Value objects for storing arbitrary data (extends
eZPublishCoreFieldTypeValue)
§
Requires converters for field values in legacy storage (implements
eZPublishCorePersistenceLegacyContentFieldValueConverter)
§
A NULL Converter is available for developers' convenience
§
Uses gateways for getting data from external storage (custom tables)
13-4-26Presenter: Łukasz Serwatka Slide 21
Extending eZ Publish 5§
FieldType
§
A common issue with rendering legacy field types in eZ Publish 5 is the
API_CONTENT_EXCEPTION
§
It occurs when the API throws an exception that could not be caught
internally (missing field type, missing converter, internal error...)
§
For simple field types, declaration of NULL converter is often a resolution
// Resources/config/fieldtypes.yml
ezpublish.fieldType.ezsample.class: %ezpublish.fieldType.eznull.class%
ezpublish.fieldType.ezsample:
class: %ezpublish.fieldType.ezsample.class%
parent: ezpublish.fieldType
arguments: [ ”ezsample" ]
tags:
- {name: ezpublish.fieldType, alias: ezsample}
13-4-26Presenter: Łukasz Serwatka Slide 22
Extending eZ Publish 5§
NULL Converter
// Resources/config/storage_engines.yml
ezpublish.fieldType.ezsample.converter.class:
%ezpublish.fieldType.eznull.converter.class%
ezpublish.fieldType.ezsample.converter:
class: %ezpublish.fieldType.ezsample.converter.class%
tags:
- {name: ezpublish.storageEngine.legacy.converter, alias:
ezsample, lazy: true, callback: '::create'}
13-4-26Presenter: Łukasz Serwatka Slide 23
Extending eZ Publish 5§
NULL Converter
§
Some FieldTypes store data in external data sources
§
Possible through the eZPublishSPIFieldTypeFieldStorage interface.
// Resources/config/fieldtypes.yml
parameters:
ezpublish.fieldType.ezsample.externalStorage.class:
eZPublishCoreFieldTypeSampleSampleStorage
services:
ezpublish.fieldType.ezsample.externalStorage:
class: %ezpublish.fieldType.ezsample.externalStorage.class%
tags:
- {name: ezpublish.fieldType.externalStorageHandler, alias:
ezsample}
13-4-26Presenter: Łukasz Serwatka Slide 24
Extending eZ Publish 5§
External storage
§
It is recommended to use gateway-based storage
§
Implement a gateway infrastructure and a registry for the gateways
§
Possible through the eZPublishCoreFieldTypeStorageGateway
// Resources/config/fieldtypes.yml
parameters:
ezpublish.fieldType.ezsample.storage_gateway.class:
eZPublishCoreFieldTypeSampleSampleStorageGatewayLegacyStorage
services:
ezpublish.fieldType.ezsample.storage_gateway:
class: %ezpublish.fieldType.ezsample.storage_gateway.class%
tags:
- {name: ezpublish.fieldType.externalStorageHandler.gateway,
alias: ezsample, identifier: LegacyStorage}
13-4-26Presenter: Łukasz Serwatka Slide 25
Extending eZ Publish 5§
External storage
abstract class Gateway extends StorageGateway
{
/**
* Stores data in the database based on the given field data
*
* @param eZPublishSPIPersistenceContentVersionInfo $versionInfo
* @param eZPublishSPIPersistenceContentField $field
*/
abstract public function storeFieldData( VersionInfo $versionInfo, Field $field );
/**
* Gets data stored in the field
*
* @param eZPublishSPIPersistenceContentVersionInfo $versionInfo
* @param eZPublishSPIPersistenceContentField $field
*/
abstract public function getFieldData( VersionInfo $versionInfo, Field $field );
/**
* Deletes field data for all $fieldIds in the version identified by
* $versionInfo.
*
* @param eZPublishSPIPersistenceContentVersionInfo $versionInfo
* @param array $fieldIds
*/
abstract public function deleteFieldData( VersionInfo $versionInfo, array $fieldIds );
} 13-4-26Presenter: Łukasz Serwatka Slide 26
Extending eZ Publish 5§
External storage
/**
* Deletes field data for all $fieldIds in the version identified by
* $versionInfo.
*
* @param eZPublishSPIPersistenceContentVersionInfo $versionInfo
* @param array $fieldIds
*/
public function deleteFieldData( VersionInfo $versionInfo, array $fieldIds )
{
$connection = $this->getConnection();
$query = $connection->createDeleteQuery();
$query
->deleteFrom( … )
->where(…)
$query->prepare()->execute();
}
13-4-26Presenter: Łukasz Serwatka Slide 27
Extending eZ Publish 5§
External storage
§
Possible to run some PHP code inside a sandbox through
the runCallback() method
<?php
// Declare use statements for the classes you may need
use eZINI;
 
// Inside a controller extending eZBundleEzPublishCoreBundleController
$settingName = 'MySetting';
$test = array( 'oneValue', 'anotherValue' );
$myLegacySetting = $this->getLegacyKernel()->runCallback(
    function () use ( $settingName, $test )
    {
        // Here you can reuse $settingName and $test variables inside the legacy
context
        $ini = eZINI::instance( 'someconfig.ini' );
        return $ini->variable( 'SomeSection', $settingName );
    }
);
13-4-26Presenter: Łukasz Serwatka Slide 28
Extending eZ Publish 5§
Running legacy code
§
Stored in the Resources/translations/ directory of the bundle.
§
Each translation file must be named according to the following path:
domain.locale.loader. For example Resources/translations/messages.fr.yml
§
Keyword messages preferred over messages that are written in the
language of the default locale. For example $t = $translator-
>trans(’ez5.great');
§
YAML is recommended configuration type
§
Possible to dump messages into the file with ezpublish/console
$ php ezpublish/console translation:update --output-
format=yml --dump-messages <locale> <bundle name>
13-4-26Presenter: Łukasz Serwatka Slide 29
Extending eZ Publish 5§
Translations
§
Commands should be placed under Command/ folder inside your Bundle
and file name must be suffixed with Command.php, e.g
EzTestCommand.php
Class EzTestCommand extends ContainerAwareCommand
{
protected function configure()
{
}
protected function execute(InputInterface $input, OutputInterface
$output)
{
}
}
13-4-26Presenter: Łukasz Serwatka Slide 30
Extending eZ Publish 5§
Console commands
§
Console command configuration
Class EzTestCommand extends ContainerAwareCommand
{
protected function configure()
{
$this
->setName('demo:eztest')
->setDescription(’eZ Publish 5 Console Test')
->addArgument(’first', InputArgument::OPTIONAL, ’First
argument')
->addOption(’second', null, InputOption::VALUE_NONE, ‘Option
param')
;
}
}
13-4-26Presenter: Łukasz Serwatka Slide 31
Extending eZ Publish 5§
Console commands
§
Console command configuration
Class EzTestCommand extends ContainerAwareCommand
{
protected function execute(InputInterface $input, OutputInterface $output)
{
$name = $input->getArgument(’first');
if ($name) {
$text = 'Hello '.$name;
}
if ($input->getOption(’second')) {
$text = strtoupper($text);
}
$output->writeln($text);
}
}
13-4-26Presenter: Łukasz Serwatka Slide 32
Extending eZ Publish 5§
Console commands
§
We recommend using composer (http://getcomposer.org) for bundles
installation
§
Provide packages via https://packagist.org website for ease of distribution
§
Configuration with composer.json
13-4-26Presenter: Łukasz Serwatka Slide 33
Extending eZ Publish 5§
Composer
{
"name": ”ez/testbundle",
"description": “",
"license": "GPL-2.0",
"authors": [
{
"name": ”eZ",
"homepage": "http://ez.no"
}
],
"require": {
"ezsystems/ezpublish-kernel": "dev-master"
},
"minimum-stability": "dev",
"autoload": {
"psr-0": {”eZTestBundle": ""}
},
"target-dir": ”eZ/TestBundle"
}
13-4-26Presenter: Łukasz Serwatka Slide 34
Extending eZ Publish 5§
composer.json

Contenu connexe

Tendances

Oracle WebLogic: Feature Timeline from WLS9 to WLS 12c
Oracle WebLogic: Feature Timeline from WLS9 to WLS 12cOracle WebLogic: Feature Timeline from WLS9 to WLS 12c
Oracle WebLogic: Feature Timeline from WLS9 to WLS 12cfrankmunz
 
Embrace Change - Embrace OSGi
Embrace Change - Embrace OSGiEmbrace Change - Embrace OSGi
Embrace Change - Embrace OSGiCarsten Ziegeler
 
Triple E class DevOps with Hudson, Maven, Kokki/Multiconf and PyDev
Triple E class DevOps with Hudson, Maven, Kokki/Multiconf and PyDevTriple E class DevOps with Hudson, Maven, Kokki/Multiconf and PyDev
Triple E class DevOps with Hudson, Maven, Kokki/Multiconf and PyDevWerner Keil
 
The Web on OSGi: Here's How
The Web on OSGi: Here's HowThe Web on OSGi: Here's How
The Web on OSGi: Here's Howmrdon
 
CamelOne 2013 Karaf A-MQ Camel CXF Security
CamelOne 2013 Karaf A-MQ Camel CXF SecurityCamelOne 2013 Karaf A-MQ Camel CXF Security
CamelOne 2013 Karaf A-MQ Camel CXF SecurityKenneth Peeples
 
When dynamic becomes static
When dynamic becomes staticWhen dynamic becomes static
When dynamic becomes staticWim Godden
 
Installing and Getting Started with Alfresco
Installing and Getting Started with AlfrescoInstalling and Getting Started with Alfresco
Installing and Getting Started with AlfrescoWildan Maulana
 
Apache Aries: A blueprint for developing with OSGi and JEE
Apache Aries: A blueprint for developing with OSGi and JEEApache Aries: A blueprint for developing with OSGi and JEE
Apache Aries: A blueprint for developing with OSGi and JEEmahrwald
 
Glassfish Web Stack Launch Jyri Virkki V2
Glassfish Web Stack Launch Jyri Virkki V2Glassfish Web Stack Launch Jyri Virkki V2
Glassfish Web Stack Launch Jyri Virkki V2Eduardo Pelegri-Llopart
 
Managing Your Runtime With P2
Managing Your Runtime With P2Managing Your Runtime With P2
Managing Your Runtime With P2Pascal Rapicault
 
CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...
CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...
CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...Jesse Gallagher
 
EM13c: Write Powerful Scripts with EMCLI
EM13c: Write Powerful Scripts with EMCLIEM13c: Write Powerful Scripts with EMCLI
EM13c: Write Powerful Scripts with EMCLIGokhan Atil
 
Creating a modern web application using Symfony API Platform, ReactJS and Red...
Creating a modern web application using Symfony API Platform, ReactJS and Red...Creating a modern web application using Symfony API Platform, ReactJS and Red...
Creating a modern web application using Symfony API Platform, ReactJS and Red...Jesus Manuel Olivas
 
Best Practices - PHP and the Oracle Database
Best Practices - PHP and the Oracle DatabaseBest Practices - PHP and the Oracle Database
Best Practices - PHP and the Oracle DatabaseChristopher Jones
 
]po[ Sencha File-Storage Specs
]po[ Sencha File-Storage Specs]po[ Sencha File-Storage Specs
]po[ Sencha File-Storage SpecsKlaus Hofeditz
 
Changes in WebLogic 12.1.3 Every Administrator Must Know
Changes in WebLogic 12.1.3 Every Administrator Must KnowChanges in WebLogic 12.1.3 Every Administrator Must Know
Changes in WebLogic 12.1.3 Every Administrator Must KnowBruno Borges
 

Tendances (20)

Oracle WebLogic: Feature Timeline from WLS9 to WLS 12c
Oracle WebLogic: Feature Timeline from WLS9 to WLS 12cOracle WebLogic: Feature Timeline from WLS9 to WLS 12c
Oracle WebLogic: Feature Timeline from WLS9 to WLS 12c
 
Laravel 5
Laravel 5Laravel 5
Laravel 5
 
Embrace Change - Embrace OSGi
Embrace Change - Embrace OSGiEmbrace Change - Embrace OSGi
Embrace Change - Embrace OSGi
 
Triple E class DevOps with Hudson, Maven, Kokki/Multiconf and PyDev
Triple E class DevOps with Hudson, Maven, Kokki/Multiconf and PyDevTriple E class DevOps with Hudson, Maven, Kokki/Multiconf and PyDev
Triple E class DevOps with Hudson, Maven, Kokki/Multiconf and PyDev
 
The Web on OSGi: Here's How
The Web on OSGi: Here's HowThe Web on OSGi: Here's How
The Web on OSGi: Here's How
 
CamelOne 2013 Karaf A-MQ Camel CXF Security
CamelOne 2013 Karaf A-MQ Camel CXF SecurityCamelOne 2013 Karaf A-MQ Camel CXF Security
CamelOne 2013 Karaf A-MQ Camel CXF Security
 
When dynamic becomes static
When dynamic becomes staticWhen dynamic becomes static
When dynamic becomes static
 
Installing and Getting Started with Alfresco
Installing and Getting Started with AlfrescoInstalling and Getting Started with Alfresco
Installing and Getting Started with Alfresco
 
Apache Aries: A blueprint for developing with OSGi and JEE
Apache Aries: A blueprint for developing with OSGi and JEEApache Aries: A blueprint for developing with OSGi and JEE
Apache Aries: A blueprint for developing with OSGi and JEE
 
Oracle Essentials Oracle Database 11g
Oracle Essentials   Oracle Database 11gOracle Essentials   Oracle Database 11g
Oracle Essentials Oracle Database 11g
 
Glassfish Web Stack Launch Jyri Virkki V2
Glassfish Web Stack Launch Jyri Virkki V2Glassfish Web Stack Launch Jyri Virkki V2
Glassfish Web Stack Launch Jyri Virkki V2
 
Managing Your Runtime With P2
Managing Your Runtime With P2Managing Your Runtime With P2
Managing Your Runtime With P2
 
CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...
CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...
CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...
 
EM13c: Write Powerful Scripts with EMCLI
EM13c: Write Powerful Scripts with EMCLIEM13c: Write Powerful Scripts with EMCLI
EM13c: Write Powerful Scripts with EMCLI
 
Creating a modern web application using Symfony API Platform, ReactJS and Red...
Creating a modern web application using Symfony API Platform, ReactJS and Red...Creating a modern web application using Symfony API Platform, ReactJS and Red...
Creating a modern web application using Symfony API Platform, ReactJS and Red...
 
Best Practices - PHP and the Oracle Database
Best Practices - PHP and the Oracle DatabaseBest Practices - PHP and the Oracle Database
Best Practices - PHP and the Oracle Database
 
Weblogic12 c installation guide
Weblogic12 c installation guideWeblogic12 c installation guide
Weblogic12 c installation guide
 
]po[ Sencha File-Storage Specs
]po[ Sencha File-Storage Specs]po[ Sencha File-Storage Specs
]po[ Sencha File-Storage Specs
 
Changes in WebLogic 12.1.3 Every Administrator Must Know
Changes in WebLogic 12.1.3 Every Administrator Must KnowChanges in WebLogic 12.1.3 Every Administrator Must Know
Changes in WebLogic 12.1.3 Every Administrator Must Know
 
plsql les03
 plsql les03 plsql les03
plsql les03
 

En vedette

Doppler & Social Me & IT Sitio: Cómo crear una Campaña de Email exitosa
Doppler & Social Me & IT Sitio: Cómo crear una Campaña de Email exitosaDoppler & Social Me & IT Sitio: Cómo crear una Campaña de Email exitosa
Doppler & Social Me & IT Sitio: Cómo crear una Campaña de Email exitosaFromDoppler
 
Qulto bemutató - Czoboly Miklós
Qulto bemutató - Czoboly MiklósQulto bemutató - Czoboly Miklós
Qulto bemutató - Czoboly MiklósMonguz Ltd.
 
Badenes Piezoeléctricos TechnoPark MotorLand
Badenes Piezoeléctricos TechnoPark MotorLandBadenes Piezoeléctricos TechnoPark MotorLand
Badenes Piezoeléctricos TechnoPark MotorLandAlfredo Santoni Gómez
 
Licencias De Aperturas 2008 Empezar Con Buen Pie
Licencias De Aperturas 2008 Empezar Con Buen PieLicencias De Aperturas 2008 Empezar Con Buen Pie
Licencias De Aperturas 2008 Empezar Con Buen PieCRM a MEDIDA
 
REDES SOCIALES EN AL EDUCACIÒN
REDES SOCIALES EN AL EDUCACIÒN REDES SOCIALES EN AL EDUCACIÒN
REDES SOCIALES EN AL EDUCACIÒN ViviPinedaC
 
Mi personalidad de mi recamara
Mi personalidad de mi recamaraMi personalidad de mi recamara
Mi personalidad de mi recamaracolt1223
 
Optimizing the production of Polyphosphate from Acinetobacter towneri
Optimizing the production of Polyphosphate from Acinetobacter towneriOptimizing the production of Polyphosphate from Acinetobacter towneri
Optimizing the production of Polyphosphate from Acinetobacter towneriGJESM Publication
 
Manual del alumno eLMformacion
Manual del alumno eLMformacionManual del alumno eLMformacion
Manual del alumno eLMformacioneLMformacion
 
Carta de presentación de candidatura patxi aldecoa
Carta de presentación de candidatura patxi aldecoaCarta de presentación de candidatura patxi aldecoa
Carta de presentación de candidatura patxi aldecoaPatxialdecoa
 
Memoria descriptiva y plan emergencia 2016
Memoria descriptiva y plan emergencia 2016Memoria descriptiva y plan emergencia 2016
Memoria descriptiva y plan emergencia 2016Paco Rodríguez
 
Vocabulary free time1
Vocabulary free time1Vocabulary free time1
Vocabulary free time1didier123
 
Resumen delitos informáticos delatorre
Resumen delitos informáticos delatorreResumen delitos informáticos delatorre
Resumen delitos informáticos delatorreJanet De la Torre
 
Best practices for sourcing in india
Best practices for sourcing in indiaBest practices for sourcing in india
Best practices for sourcing in indiaHugo Messer
 

En vedette (20)

Doppler & Social Me & IT Sitio: Cómo crear una Campaña de Email exitosa
Doppler & Social Me & IT Sitio: Cómo crear una Campaña de Email exitosaDoppler & Social Me & IT Sitio: Cómo crear una Campaña de Email exitosa
Doppler & Social Me & IT Sitio: Cómo crear una Campaña de Email exitosa
 
ISOPLYO20 2 MODELOS
ISOPLYO20 2 MODELOSISOPLYO20 2 MODELOS
ISOPLYO20 2 MODELOS
 
AIT.Newsletter.July.2011
AIT.Newsletter.July.2011AIT.Newsletter.July.2011
AIT.Newsletter.July.2011
 
Qulto bemutató - Czoboly Miklós
Qulto bemutató - Czoboly MiklósQulto bemutató - Czoboly Miklós
Qulto bemutató - Czoboly Miklós
 
Badenes Piezoeléctricos TechnoPark MotorLand
Badenes Piezoeléctricos TechnoPark MotorLandBadenes Piezoeléctricos TechnoPark MotorLand
Badenes Piezoeléctricos TechnoPark MotorLand
 
Licencias De Aperturas 2008 Empezar Con Buen Pie
Licencias De Aperturas 2008 Empezar Con Buen PieLicencias De Aperturas 2008 Empezar Con Buen Pie
Licencias De Aperturas 2008 Empezar Con Buen Pie
 
Curriculum vitae
Curriculum vitaeCurriculum vitae
Curriculum vitae
 
Ballet
BalletBallet
Ballet
 
REDES SOCIALES EN AL EDUCACIÒN
REDES SOCIALES EN AL EDUCACIÒN REDES SOCIALES EN AL EDUCACIÒN
REDES SOCIALES EN AL EDUCACIÒN
 
Cali luis internet
Cali luis internetCali luis internet
Cali luis internet
 
Mi personalidad de mi recamara
Mi personalidad de mi recamaraMi personalidad de mi recamara
Mi personalidad de mi recamara
 
Optimizing the production of Polyphosphate from Acinetobacter towneri
Optimizing the production of Polyphosphate from Acinetobacter towneriOptimizing the production of Polyphosphate from Acinetobacter towneri
Optimizing the production of Polyphosphate from Acinetobacter towneri
 
Manual del alumno eLMformacion
Manual del alumno eLMformacionManual del alumno eLMformacion
Manual del alumno eLMformacion
 
Carta de presentación de candidatura patxi aldecoa
Carta de presentación de candidatura patxi aldecoaCarta de presentación de candidatura patxi aldecoa
Carta de presentación de candidatura patxi aldecoa
 
Memoria descriptiva y plan emergencia 2016
Memoria descriptiva y plan emergencia 2016Memoria descriptiva y plan emergencia 2016
Memoria descriptiva y plan emergencia 2016
 
Vocabulary free time1
Vocabulary free time1Vocabulary free time1
Vocabulary free time1
 
Resumen delitos informáticos delatorre
Resumen delitos informáticos delatorreResumen delitos informáticos delatorre
Resumen delitos informáticos delatorre
 
Documentación Web application firewall
Documentación Web application firewallDocumentación Web application firewall
Documentación Web application firewall
 
Best practices for sourcing in india
Best practices for sourcing in indiaBest practices for sourcing in india
Best practices for sourcing in india
 
2 inteligencias múltiples
2 inteligencias múltiples2 inteligencias múltiples
2 inteligencias múltiples
 

Similaire à 2013.04.23 eZ Sessions 6 - Migrating legacy eZ Publish extensions - Lukasz Serwatka

ZZ BC#7.5 asp.net mvc practice and guideline refresh!
ZZ BC#7.5 asp.net mvc practice  and guideline refresh! ZZ BC#7.5 asp.net mvc practice  and guideline refresh!
ZZ BC#7.5 asp.net mvc practice and guideline refresh! Chalermpon Areepong
 
Eclipse Overview
Eclipse Overview Eclipse Overview
Eclipse Overview Lars Vogel
 
Single Page Web Applications with WordPress REST API
Single Page Web Applications with WordPress REST APISingle Page Web Applications with WordPress REST API
Single Page Web Applications with WordPress REST APITejaswini Deshpande
 
ITU - MDD - Eclipse Plug-ins
ITU - MDD - Eclipse Plug-insITU - MDD - Eclipse Plug-ins
ITU - MDD - Eclipse Plug-insTonny Madsen
 
Play Framework: The Basics
Play Framework: The BasicsPlay Framework: The Basics
Play Framework: The BasicsPhilip Langer
 
Eclipse e4 Overview
Eclipse e4 OverviewEclipse e4 Overview
Eclipse e4 OverviewLars Vogel
 
Azure DevOps for JavaScript Developers
Azure DevOps for JavaScript DevelopersAzure DevOps for JavaScript Developers
Azure DevOps for JavaScript DevelopersSarah Dutkiewicz
 
Learning ASP.NET 5 and MVC 6
Learning ASP.NET 5 and MVC 6Learning ASP.NET 5 and MVC 6
Learning ASP.NET 5 and MVC 6Ido Flatow
 
Introduction to Codenvy / JugSummerCamp 2014
Introduction to Codenvy / JugSummerCamp 2014Introduction to Codenvy / JugSummerCamp 2014
Introduction to Codenvy / JugSummerCamp 2014Florent BENOIT
 
Selenium & PHPUnit made easy with Steward (Berlin, April 2017)
Selenium & PHPUnit made easy with Steward (Berlin, April 2017)Selenium & PHPUnit made easy with Steward (Berlin, April 2017)
Selenium & PHPUnit made easy with Steward (Berlin, April 2017)Ondřej Machulda
 
ASFWS 2013 - Advances in secure (ASP).NET development – break the hackers’ sp...
ASFWS 2013 - Advances in secure (ASP).NET development – break the hackers’ sp...ASFWS 2013 - Advances in secure (ASP).NET development – break the hackers’ sp...
ASFWS 2013 - Advances in secure (ASP).NET development – break the hackers’ sp...Cyber Security Alliance
 
Automatisation in development and testing - within budget
Automatisation in development and testing - within budgetAutomatisation in development and testing - within budget
Automatisation in development and testing - within budgetDavid Lukac
 
Eclipse e4 on Java Forum Stuttgart 2010
Eclipse e4 on Java Forum Stuttgart 2010Eclipse e4 on Java Forum Stuttgart 2010
Eclipse e4 on Java Forum Stuttgart 2010Lars Vogel
 
Nuxeo ECM Platform - Technical Overview
Nuxeo ECM Platform - Technical OverviewNuxeo ECM Platform - Technical Overview
Nuxeo ECM Platform - Technical OverviewNuxeo
 
Nuxeo Enterprise Platform (Nuxeo EP) - Technical Overview
Nuxeo Enterprise Platform (Nuxeo EP) - Technical OverviewNuxeo Enterprise Platform (Nuxeo EP) - Technical Overview
Nuxeo Enterprise Platform (Nuxeo EP) - Technical OverviewNuxeo
 
Let's play with adf 3.0
Let's play with adf 3.0Let's play with adf 3.0
Let's play with adf 3.0Eugenio Romano
 

Similaire à 2013.04.23 eZ Sessions 6 - Migrating legacy eZ Publish extensions - Lukasz Serwatka (20)

sveltekit-en.pdf
sveltekit-en.pdfsveltekit-en.pdf
sveltekit-en.pdf
 
ZZ BC#7.5 asp.net mvc practice and guideline refresh!
ZZ BC#7.5 asp.net mvc practice  and guideline refresh! ZZ BC#7.5 asp.net mvc practice  and guideline refresh!
ZZ BC#7.5 asp.net mvc practice and guideline refresh!
 
Eclipse Overview
Eclipse Overview Eclipse Overview
Eclipse Overview
 
Single Page Web Applications with WordPress REST API
Single Page Web Applications with WordPress REST APISingle Page Web Applications with WordPress REST API
Single Page Web Applications with WordPress REST API
 
Alfresco Architecture
Alfresco ArchitectureAlfresco Architecture
Alfresco Architecture
 
ITU - MDD - Eclipse Plug-ins
ITU - MDD - Eclipse Plug-insITU - MDD - Eclipse Plug-ins
ITU - MDD - Eclipse Plug-ins
 
Express node js
Express node jsExpress node js
Express node js
 
Play Framework: The Basics
Play Framework: The BasicsPlay Framework: The Basics
Play Framework: The Basics
 
Eclipse e4 Overview
Eclipse e4 OverviewEclipse e4 Overview
Eclipse e4 Overview
 
Azure DevOps for JavaScript Developers
Azure DevOps for JavaScript DevelopersAzure DevOps for JavaScript Developers
Azure DevOps for JavaScript Developers
 
Learning ASP.NET 5 and MVC 6
Learning ASP.NET 5 and MVC 6Learning ASP.NET 5 and MVC 6
Learning ASP.NET 5 and MVC 6
 
Introduction to Codenvy / JugSummerCamp 2014
Introduction to Codenvy / JugSummerCamp 2014Introduction to Codenvy / JugSummerCamp 2014
Introduction to Codenvy / JugSummerCamp 2014
 
Selenium & PHPUnit made easy with Steward (Berlin, April 2017)
Selenium & PHPUnit made easy with Steward (Berlin, April 2017)Selenium & PHPUnit made easy with Steward (Berlin, April 2017)
Selenium & PHPUnit made easy with Steward (Berlin, April 2017)
 
ASFWS 2013 - Advances in secure (ASP).NET development – break the hackers’ sp...
ASFWS 2013 - Advances in secure (ASP).NET development – break the hackers’ sp...ASFWS 2013 - Advances in secure (ASP).NET development – break the hackers’ sp...
ASFWS 2013 - Advances in secure (ASP).NET development – break the hackers’ sp...
 
Automatisation in development and testing - within budget
Automatisation in development and testing - within budgetAutomatisation in development and testing - within budget
Automatisation in development and testing - within budget
 
Eclipse e4 on Java Forum Stuttgart 2010
Eclipse e4 on Java Forum Stuttgart 2010Eclipse e4 on Java Forum Stuttgart 2010
Eclipse e4 on Java Forum Stuttgart 2010
 
Creation&imitation
Creation&imitationCreation&imitation
Creation&imitation
 
Nuxeo ECM Platform - Technical Overview
Nuxeo ECM Platform - Technical OverviewNuxeo ECM Platform - Technical Overview
Nuxeo ECM Platform - Technical Overview
 
Nuxeo Enterprise Platform (Nuxeo EP) - Technical Overview
Nuxeo Enterprise Platform (Nuxeo EP) - Technical OverviewNuxeo Enterprise Platform (Nuxeo EP) - Technical Overview
Nuxeo Enterprise Platform (Nuxeo EP) - Technical Overview
 
Let's play with adf 3.0
Let's play with adf 3.0Let's play with adf 3.0
Let's play with adf 3.0
 

Plus de eZ Publish Community

5 idées pour transformer votre contenu en business
5 idées pour transformer votre contenu en business5 idées pour transformer votre contenu en business
5 idées pour transformer votre contenu en businesseZ Publish Community
 
eZ Publish Plateform 5.2 Webinar Deutsch
eZ Publish Plateform 5.2 Webinar Deutsch eZ Publish Plateform 5.2 Webinar Deutsch
eZ Publish Plateform 5.2 Webinar Deutsch eZ Publish Community
 
eZ UnConference#2 - eZ Publish 5 basics Philippe Vincent-Royol & Florent Huck
eZ UnConference#2 - eZ Publish 5 basics Philippe Vincent-Royol & Florent HuckeZ UnConference#2 - eZ Publish 5 basics Philippe Vincent-Royol & Florent Huck
eZ UnConference#2 - eZ Publish 5 basics Philippe Vincent-Royol & Florent HuckeZ Publish Community
 
eZ Unconference#2 - Future of the internet 2020 - C. Zahneissen (cpo)
eZ Unconference#2 - Future of the internet 2020 - C. Zahneissen (cpo)eZ Unconference#2 - Future of the internet 2020 - C. Zahneissen (cpo)
eZ Unconference#2 - Future of the internet 2020 - C. Zahneissen (cpo)eZ Publish Community
 
eZ Unconference#2 - Keynote - A. Farstad (CEO)
eZ Unconference#2 - Keynote - A. Farstad (CEO)eZ Unconference#2 - Keynote - A. Farstad (CEO)
eZ Unconference#2 - Keynote - A. Farstad (CEO)eZ Publish Community
 
How is the 5.x data model going to compare to 4.x (+no sql )
How is the 5.x data model going to compare  to 4.x (+no sql )How is the 5.x data model going to compare  to 4.x (+no sql )
How is the 5.x data model going to compare to 4.x (+no sql )eZ Publish Community
 
Handling transition between 4.x and 5.x.
Handling transition between 4.x and 5.x.Handling transition between 4.x and 5.x.
Handling transition between 4.x and 5.x.eZ Publish Community
 
E z publish 5 template syntax (twig),
E z publish 5 template syntax (twig),E z publish 5 template syntax (twig),
E z publish 5 template syntax (twig),eZ Publish Community
 
2012 10-17 un conference ez publish cloud presentation
2012 10-17 un conference ez publish cloud presentation2012 10-17 un conference ez publish cloud presentation
2012 10-17 un conference ez publish cloud presentationeZ Publish Community
 
Mugo - Approval Workflow extension for eZ Publish - eZ Day Paris - Oct 14th 2011
Mugo - Approval Workflow extension for eZ Publish - eZ Day Paris - Oct 14th 2011Mugo - Approval Workflow extension for eZ Publish - eZ Day Paris - Oct 14th 2011
Mugo - Approval Workflow extension for eZ Publish - eZ Day Paris - Oct 14th 2011eZ Publish Community
 
Tony Wood - Keynote Vision with Technology
Tony Wood - Keynote Vision with TechnologyTony Wood - Keynote Vision with Technology
Tony Wood - Keynote Vision with TechnologyeZ Publish Community
 
Simon Wan - Keynote - The Web Strategy of the Wall Street Journal in Asia
Simon Wan - Keynote - The Web Strategy of the Wall Street Journal in AsiaSimon Wan - Keynote - The Web Strategy of the Wall Street Journal in Asia
Simon Wan - Keynote - The Web Strategy of the Wall Street Journal in AsiaeZ Publish Community
 
Mark Marsiglio - Autoscaling with eZ in the Cloud - A Case Study
Mark Marsiglio - Autoscaling with eZ in the Cloud - A Case StudyMark Marsiglio - Autoscaling with eZ in the Cloud - A Case Study
Mark Marsiglio - Autoscaling with eZ in the Cloud - A Case StudyeZ Publish Community
 
Marianne Otterdahl Møller - Multinational and multichannel market communication
Marianne Otterdahl Møller - Multinational and multichannel market communicationMarianne Otterdahl Møller - Multinational and multichannel market communication
Marianne Otterdahl Møller - Multinational and multichannel market communicationeZ Publish Community
 
Gabriele Viebach - Keynote eZ Conference
Gabriele Viebach - Keynote eZ ConferenceGabriele Viebach - Keynote eZ Conference
Gabriele Viebach - Keynote eZ ConferenceeZ Publish Community
 

Plus de eZ Publish Community (20)

5 idées pour transformer votre contenu en business
5 idées pour transformer votre contenu en business5 idées pour transformer votre contenu en business
5 idées pour transformer votre contenu en business
 
eZ Publish Plateform 5.2 Webinar Deutsch
eZ Publish Plateform 5.2 Webinar Deutsch eZ Publish Plateform 5.2 Webinar Deutsch
eZ Publish Plateform 5.2 Webinar Deutsch
 
eZ UnConference#2 - eZ Publish 5 basics Philippe Vincent-Royol & Florent Huck
eZ UnConference#2 - eZ Publish 5 basics Philippe Vincent-Royol & Florent HuckeZ UnConference#2 - eZ Publish 5 basics Philippe Vincent-Royol & Florent Huck
eZ UnConference#2 - eZ Publish 5 basics Philippe Vincent-Royol & Florent Huck
 
eZ Unconference#2 - Future of the internet 2020 - C. Zahneissen (cpo)
eZ Unconference#2 - Future of the internet 2020 - C. Zahneissen (cpo)eZ Unconference#2 - Future of the internet 2020 - C. Zahneissen (cpo)
eZ Unconference#2 - Future of the internet 2020 - C. Zahneissen (cpo)
 
eZ Unconference#2 - Keynote - A. Farstad (CEO)
eZ Unconference#2 - Keynote - A. Farstad (CEO)eZ Unconference#2 - Keynote - A. Farstad (CEO)
eZ Unconference#2 - Keynote - A. Farstad (CEO)
 
Cxm mobile stig martin fiska
Cxm mobile   stig martin fiskaCxm mobile   stig martin fiska
Cxm mobile stig martin fiska
 
App factory igor vrdoljak
App factory   igor vrdoljakApp factory   igor vrdoljak
App factory igor vrdoljak
 
The administration interface
The administration interfaceThe administration interface
The administration interface
 
How is the 5.x data model going to compare to 4.x (+no sql )
How is the 5.x data model going to compare  to 4.x (+no sql )How is the 5.x data model going to compare  to 4.x (+no sql )
How is the 5.x data model going to compare to 4.x (+no sql )
 
Handling transition between 4.x and 5.x.
Handling transition between 4.x and 5.x.Handling transition between 4.x and 5.x.
Handling transition between 4.x and 5.x.
 
E z publish 5 template syntax (twig),
E z publish 5 template syntax (twig),E z publish 5 template syntax (twig),
E z publish 5 template syntax (twig),
 
2012 10-17 un conference ez publish cloud presentation
2012 10-17 un conference ez publish cloud presentation2012 10-17 un conference ez publish cloud presentation
2012 10-17 un conference ez publish cloud presentation
 
Mugo - Approval Workflow extension for eZ Publish - eZ Day Paris - Oct 14th 2011
Mugo - Approval Workflow extension for eZ Publish - eZ Day Paris - Oct 14th 2011Mugo - Approval Workflow extension for eZ Publish - eZ Day Paris - Oct 14th 2011
Mugo - Approval Workflow extension for eZ Publish - eZ Day Paris - Oct 14th 2011
 
Tony Wood - Keynote Vision with Technology
Tony Wood - Keynote Vision with TechnologyTony Wood - Keynote Vision with Technology
Tony Wood - Keynote Vision with Technology
 
Simon Wan - Keynote - The Web Strategy of the Wall Street Journal in Asia
Simon Wan - Keynote - The Web Strategy of the Wall Street Journal in AsiaSimon Wan - Keynote - The Web Strategy of the Wall Street Journal in Asia
Simon Wan - Keynote - The Web Strategy of the Wall Street Journal in Asia
 
Maxime Thomas - eZBK
Maxime Thomas - eZBKMaxime Thomas - eZBK
Maxime Thomas - eZBK
 
Mark Marsiglio - Autoscaling with eZ in the Cloud - A Case Study
Mark Marsiglio - Autoscaling with eZ in the Cloud - A Case StudyMark Marsiglio - Autoscaling with eZ in the Cloud - A Case Study
Mark Marsiglio - Autoscaling with eZ in the Cloud - A Case Study
 
Marianne Otterdahl Møller - Multinational and multichannel market communication
Marianne Otterdahl Møller - Multinational and multichannel market communicationMarianne Otterdahl Møller - Multinational and multichannel market communication
Marianne Otterdahl Møller - Multinational and multichannel market communication
 
Gabriele Viebach - Keynote eZ Conference
Gabriele Viebach - Keynote eZ ConferenceGabriele Viebach - Keynote eZ Conference
Gabriele Viebach - Keynote eZ Conference
 
Mark Pilipczuk - Neustar Journey
Mark Pilipczuk - Neustar JourneyMark Pilipczuk - Neustar Journey
Mark Pilipczuk - Neustar Journey
 

Dernier

Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfhans926745
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 

Dernier (20)

Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 

2013.04.23 eZ Sessions 6 - Migrating legacy eZ Publish extensions - Lukasz Serwatka

  • 1. Migrating eZ Publish 4 extensions to eZ Publish 5
  • 2. 2013-04-23Presenter: Łukasz Serwatka Slide 2 Extending eZ Publish 5§ Presenter Łukasz Serwatka Product Management Technical Lead lukasz.serwatka@ez.no @lserwatka § Working with eZ since 1st of March 2005 § Over 10 years of experience with eZ Publish § Former member of the Engineering team § eZ Publish & Polish PHP Community Member § Expert in mobile solutions (mobile applications & mobile strategies)
  • 3. 13-4-26Presenter: Łukasz Serwatka Slide 3 Extending eZ Publish 5§ Preparation § Drivers for migration (challenges, requirements) - It is very important to understand the drivers behind a migration effort § Inventory of current environment - Creating a detailed summary of the current extension portfolio really helps in terms of understanding the scope of a migration effort § Migration service provider - evaluate at least a couple of migration service providers if you do not have migration skills and staff in-house. § Migration effort estimate - the estimate depends on many factors such as extension size, database complexity, components, etc. Usually provided by the migration service provider. § Training requirements - Training requirements for existing development team on the new platform need to be assessed to ensure that they can support the new environment effectively and can participate in the migration process if required.
  • 4. 13-4-26Presenter: Łukasz Serwatka Slide 4 Extending eZ Publish 5§ Preparation § Make in-depth analysis of the existing eZ Publish 4.x extension functionality and code base, focusing especially on § External storage (custom tables) § Configuration (INI settings overrides) § CLI scripts § Template overrides § Datatypes § Edit handlers § Workflow events § AJAX calls § Translations § User interface (backend) § Carefully judge which elements can be natively implemented in eZ Publish 5 and which ones still require legacy kernel. Not all legacy features are available in eZ Publish 5 yet, and it is an ongoing process to fill the gaps.
  • 5. 13-4-26Presenter: Łukasz Serwatka Slide 5 Extending eZ Publish 5§ Preparation § The eZ Publish 5 supported extension points at the moment: § FieldTypes (with custom tables) § Templates (view providers for Content, Location and Blocks [since eZ Publish 5.1]) § Services (Persistence API) § Controllers & Actions (Routes) § Events (PostSiteAccessMatchEvent, PreContentViewEvent, APIContentExceptionEvent) − eZ/Publish/Core/MVC/Legacy/LegacyEvents.php − eZ/Publish/Core/MVC/Symfony/MVCEvents.php
  • 6. 13-4-26Presenter: Łukasz Serwatka Slide 6 Extending eZ Publish 5§ New concepts in eZ Publish 5.x eZ Publish 4.x eZ Publish 5.x Module Controller, extends eZBundleEzPublishCoreBundleController Action & View Action: the method on the Controller to execute. View is a (Twig) template that displays the result of the Action. eZTemplate Twig, new template engine, new syntax fetch() Render function, HMVC concept, a function that enables embedding if other controller calls Extension Bundle in the eZ Publish 5 (Symfony2) CLI eZ Publish 5 ezpublish/console component for creating command line interfaces INI settings YAML, recommended configuration type in eZ Publish 5
  • 7. 13-4-26Presenter: Łukasz Serwatka Slide 7 Extending eZ Publish 5§ Naming differences between eZ Publish 4.x and 5.x eZ Publish 4.x eZ Publish 5.x (Content) Class ContentType (Content) Class Group ContentTypeGroup (Content) Class Attribute FieldDefinition (Content) Object Content (meta info in: ContentInfo) (Content Object) Version VersionInfo (Content Object) Attribute Field (Content Object) Attribute content FieldValue Datatype FieldType Node Location
  • 8. § eZ Publish 5 can be extended thanks to the bundle system § A Bundle is a directory containing a set of files (PHP files, stylesheets, JavaScripts, images, ...) that implement a single feature (a blog, a forum, etc) and which can be easily shared with other developers. § eZ Publish 5 also provides a command line interface for generating a basic bundle skeleton: $ php ezpublish/console generate:bundle –namespace=eZ/TestBundle 13-4-26Presenter: Łukasz Serwatka Slide 8 Extending eZ Publish 5
  • 9. 13-4-26Presenter: Łukasz Serwatka Slide 9 Extending eZ Publish 5§ Bundle Directory Structure Bundle Directory Structure Description Controller/ contains the controllers of the bundle (e.g. HelloController.php); DependencyInjection/ holds certain dependency injection extension classes, which may import service configuration Resources/config/ houses configuration, including routing configuration (e.g. routing.yml); Resources/views/ holds templates organized by controller name (e.g. Hello/index.html.twig); Resources/public/ contains web assets (images, stylesheets, etc) and is copied or symbolically linked into the project web/ directory via the assets:install console command; Tests/ holds all tests for the bundle.
  • 10. 13-4-26Presenter: Łukasz Serwatka Slide 10 Extending eZ Publish 5§ Bundle Directory Structure – Advanced Bundle Directory Structure Description API/ contains the value object definitions, service interfaces, etc. In short, public API interfaces provided by your bundle. Core/ holds field types implementation, persistence related classes, repository implementations, signal-slot implementations, etc. SPI/ (Service Provider Interface) holds interfaces that can contains one or several implementations around Persistence (database), IO (file system), FieldTypes (former DataTypes), Limitations (permissions system), etc. EventListeners/ holds event listeners implementation for both eZ Publish 5 and LS Command/ contains Console commands, each file must be suffixed with Command.php
  • 11. § Example eZ Publish 5 Bundle architecture 13-4-26Presenter: Łukasz Serwatka Slide 11 Extending eZ Publish 5§ Bundle Directory Structure
  • 12. § File: eZTestBundle.php <?php Namespace eZTestBundle; use SymfonyComponentHttpKernelBundleBundle; class eZTestBundle extends Bundle { } 13-4-26Presenter: Łukasz Serwatka Slide 12 Extending eZ Publish 5§ Main Bundle Class
  • 13. § Before a Bundle can be used it has to be registered in the system. § With the registerBundles() method, you have total control over which bundles are used by eZ Publish 5 (including the core Symfony bundles). // ezpublish/EzPublishKernel.php public function registerBundles() { $bundles = array( ..., // register your bundles new eZTestBundleeZTestBundle(), ); // ... return $bundles; } 13-4-26Presenter: <enter presenter Slide 13 Extending eZ Publish 5§ Registering Bundle
  • 14. § eZ Publish 5 provides a shortcut for automatic bundle registration php ezpublish/console generate:bundle --namespace=eZ/TestBundle php ezpublish/console assets:install --symlink php ezpublish/console cache:clear 13-4-26Presenter: Łukasz Serwatka Slide 14 Extending eZ Publish 5§ Registering Bundle
  • 15. § File: eZTestBundle.php <?php Namespace eZTestBundle; use SymfonyComponentHttpKernelBundleBundle; class eZTestBundle extends Bundle { public function getParent() { return ’eZDemoBundle'; } } 13-4-26Presenter: Łukasz Serwatka Slide 15 Extending eZ Publish 5§ Bundle Override
  • 16. § File: src/eZ/DemoBundle/Controller/MyController.php <?php namespace eZDemoBundleMyController; use EzSystemsDemoBundleControllerDemoController as BaseController; class MyController extends BaseController { public function footerAction( $locationId ) { // Call parent method or completely replace its logic with your own $response = parent::footerAction( $locationId ); // ... do custom stuff return $response; } } § Only works if the bundle refers to the controller using the standard EzSystemsDemoBundle:Demo:footer syntax in routes and templates 13-4-26Presenter: Łukasz Serwatka Slide 16 Extending eZ Publish 5§ Controller Override
  • 17. § File: view.html.twig <h1>Hello</h1> <p>I’m a Twig template!</p> § Created Twig template can be included as follows: {% include ‘eZTestBundle::view.html.twig’ %} 13-4-26Presenter: Łukasz Serwatka Slide 17 Extending eZ Publish 5§ Example Twig Template
  • 18. § Legacy template include // eZ Publish 5.0 {% ez_legacy_include "design:parts/menu.tpl" with {"current_node_id": location.contentInfo.mainLocationId} %} // eZ Publish 5.1 and above {% include "design:parts/menu.tpl" with {"current_node_id": location.contentInfo.mainLocationId} %} Note that if you pass Content or a Location it will be converted to the corresponding eZ Publish Legacy objects. 13-4-26Presenter: Łukasz Serwatka Slide 18 Extending eZ Publish 5§ Working with legacy templates
  • 19. § The best practice for extension migration regarding configuration is to keep a compatible format ezoe.ini [EditorSettings] # Skin for the editor, 'default' and 'o2k7' is included as standard Skin=o2k7 # Lets you control alignment of toolbar buttons [left|right] ToolbarAlign=left parameters: # Namespace is ezoe (INI file was ezoe.ini), scope is defined to ezdemo_site siteaccess ezoe.ezdemo_site.EditorSettings.Skin: o2k7 ezoe.ezdemo_site.EditorSettings.ToolbarAlign: left 13-4-26Presenter: Łukasz Serwatka Slide 19 Extending eZ Publish 5§ Working with INI settings
  • 20. // Assuming that the current siteaccess is ezdemo_site // The following code will work whether you're using the legacy extension or the migrated one. $resolver = $this->getConfigResolver(); $skin = $resolver->getParameter( ’EditorSettings.Skin', ’ezoe' ); $toolbarAlign= $resolver->getParameter( ’EditorSettings.ToolbarAlign', ’ezoe' ); 13-4-26Presenter: Łukasz Serwatka Slide 20 Extending eZ Publish 5§ Working with INI settings
  • 21. § Datatypes are FieldTypes in eZ Publish 5 § Extends eZPublishCoreFieldTypeFieldType class § Uses Value objects for storing arbitrary data (extends eZPublishCoreFieldTypeValue) § Requires converters for field values in legacy storage (implements eZPublishCorePersistenceLegacyContentFieldValueConverter) § A NULL Converter is available for developers' convenience § Uses gateways for getting data from external storage (custom tables) 13-4-26Presenter: Łukasz Serwatka Slide 21 Extending eZ Publish 5§ FieldType
  • 22. § A common issue with rendering legacy field types in eZ Publish 5 is the API_CONTENT_EXCEPTION § It occurs when the API throws an exception that could not be caught internally (missing field type, missing converter, internal error...) § For simple field types, declaration of NULL converter is often a resolution // Resources/config/fieldtypes.yml ezpublish.fieldType.ezsample.class: %ezpublish.fieldType.eznull.class% ezpublish.fieldType.ezsample: class: %ezpublish.fieldType.ezsample.class% parent: ezpublish.fieldType arguments: [ ”ezsample" ] tags: - {name: ezpublish.fieldType, alias: ezsample} 13-4-26Presenter: Łukasz Serwatka Slide 22 Extending eZ Publish 5§ NULL Converter
  • 23. // Resources/config/storage_engines.yml ezpublish.fieldType.ezsample.converter.class: %ezpublish.fieldType.eznull.converter.class% ezpublish.fieldType.ezsample.converter: class: %ezpublish.fieldType.ezsample.converter.class% tags: - {name: ezpublish.storageEngine.legacy.converter, alias: ezsample, lazy: true, callback: '::create'} 13-4-26Presenter: Łukasz Serwatka Slide 23 Extending eZ Publish 5§ NULL Converter
  • 24. § Some FieldTypes store data in external data sources § Possible through the eZPublishSPIFieldTypeFieldStorage interface. // Resources/config/fieldtypes.yml parameters: ezpublish.fieldType.ezsample.externalStorage.class: eZPublishCoreFieldTypeSampleSampleStorage services: ezpublish.fieldType.ezsample.externalStorage: class: %ezpublish.fieldType.ezsample.externalStorage.class% tags: - {name: ezpublish.fieldType.externalStorageHandler, alias: ezsample} 13-4-26Presenter: Łukasz Serwatka Slide 24 Extending eZ Publish 5§ External storage
  • 25. § It is recommended to use gateway-based storage § Implement a gateway infrastructure and a registry for the gateways § Possible through the eZPublishCoreFieldTypeStorageGateway // Resources/config/fieldtypes.yml parameters: ezpublish.fieldType.ezsample.storage_gateway.class: eZPublishCoreFieldTypeSampleSampleStorageGatewayLegacyStorage services: ezpublish.fieldType.ezsample.storage_gateway: class: %ezpublish.fieldType.ezsample.storage_gateway.class% tags: - {name: ezpublish.fieldType.externalStorageHandler.gateway, alias: ezsample, identifier: LegacyStorage} 13-4-26Presenter: Łukasz Serwatka Slide 25 Extending eZ Publish 5§ External storage
  • 26. abstract class Gateway extends StorageGateway { /** * Stores data in the database based on the given field data * * @param eZPublishSPIPersistenceContentVersionInfo $versionInfo * @param eZPublishSPIPersistenceContentField $field */ abstract public function storeFieldData( VersionInfo $versionInfo, Field $field ); /** * Gets data stored in the field * * @param eZPublishSPIPersistenceContentVersionInfo $versionInfo * @param eZPublishSPIPersistenceContentField $field */ abstract public function getFieldData( VersionInfo $versionInfo, Field $field ); /** * Deletes field data for all $fieldIds in the version identified by * $versionInfo. * * @param eZPublishSPIPersistenceContentVersionInfo $versionInfo * @param array $fieldIds */ abstract public function deleteFieldData( VersionInfo $versionInfo, array $fieldIds ); } 13-4-26Presenter: Łukasz Serwatka Slide 26 Extending eZ Publish 5§ External storage
  • 27. /** * Deletes field data for all $fieldIds in the version identified by * $versionInfo. * * @param eZPublishSPIPersistenceContentVersionInfo $versionInfo * @param array $fieldIds */ public function deleteFieldData( VersionInfo $versionInfo, array $fieldIds ) { $connection = $this->getConnection(); $query = $connection->createDeleteQuery(); $query ->deleteFrom( … ) ->where(…) $query->prepare()->execute(); } 13-4-26Presenter: Łukasz Serwatka Slide 27 Extending eZ Publish 5§ External storage
  • 28. § Possible to run some PHP code inside a sandbox through the runCallback() method <?php // Declare use statements for the classes you may need use eZINI;   // Inside a controller extending eZBundleEzPublishCoreBundleController $settingName = 'MySetting'; $test = array( 'oneValue', 'anotherValue' ); $myLegacySetting = $this->getLegacyKernel()->runCallback(     function () use ( $settingName, $test )     {         // Here you can reuse $settingName and $test variables inside the legacy context         $ini = eZINI::instance( 'someconfig.ini' );         return $ini->variable( 'SomeSection', $settingName );     } ); 13-4-26Presenter: Łukasz Serwatka Slide 28 Extending eZ Publish 5§ Running legacy code
  • 29. § Stored in the Resources/translations/ directory of the bundle. § Each translation file must be named according to the following path: domain.locale.loader. For example Resources/translations/messages.fr.yml § Keyword messages preferred over messages that are written in the language of the default locale. For example $t = $translator- >trans(’ez5.great'); § YAML is recommended configuration type § Possible to dump messages into the file with ezpublish/console $ php ezpublish/console translation:update --output- format=yml --dump-messages <locale> <bundle name> 13-4-26Presenter: Łukasz Serwatka Slide 29 Extending eZ Publish 5§ Translations
  • 30. § Commands should be placed under Command/ folder inside your Bundle and file name must be suffixed with Command.php, e.g EzTestCommand.php Class EzTestCommand extends ContainerAwareCommand { protected function configure() { } protected function execute(InputInterface $input, OutputInterface $output) { } } 13-4-26Presenter: Łukasz Serwatka Slide 30 Extending eZ Publish 5§ Console commands
  • 31. § Console command configuration Class EzTestCommand extends ContainerAwareCommand { protected function configure() { $this ->setName('demo:eztest') ->setDescription(’eZ Publish 5 Console Test') ->addArgument(’first', InputArgument::OPTIONAL, ’First argument') ->addOption(’second', null, InputOption::VALUE_NONE, ‘Option param') ; } } 13-4-26Presenter: Łukasz Serwatka Slide 31 Extending eZ Publish 5§ Console commands
  • 32. § Console command configuration Class EzTestCommand extends ContainerAwareCommand { protected function execute(InputInterface $input, OutputInterface $output) { $name = $input->getArgument(’first'); if ($name) { $text = 'Hello '.$name; } if ($input->getOption(’second')) { $text = strtoupper($text); } $output->writeln($text); } } 13-4-26Presenter: Łukasz Serwatka Slide 32 Extending eZ Publish 5§ Console commands
  • 33. § We recommend using composer (http://getcomposer.org) for bundles installation § Provide packages via https://packagist.org website for ease of distribution § Configuration with composer.json 13-4-26Presenter: Łukasz Serwatka Slide 33 Extending eZ Publish 5§ Composer
  • 34. { "name": ”ez/testbundle", "description": “", "license": "GPL-2.0", "authors": [ { "name": ”eZ", "homepage": "http://ez.no" } ], "require": { "ezsystems/ezpublish-kernel": "dev-master" }, "minimum-stability": "dev", "autoload": { "psr-0": {”eZTestBundle": ""} }, "target-dir": ”eZ/TestBundle" } 13-4-26Presenter: Łukasz Serwatka Slide 34 Extending eZ Publish 5§ composer.json