SlideShare a Scribd company logo
1 of 67
Download to read offline
Drupal 8 Configuration system for
coders and site builders
Friday 16 August 13
who are we?
Kristof De Jaeger
@swentel
co-maintainer of Field API
Lead maintainer of Display Suite
Developer @ Wunderkraut
Friday 16 August 13
who are we?
Gábor Hojtsy
@gaborhojtsy
Multilingual Initiative owner
Long time Drupal Core contributor
Number one employee @ Acquia
Friday 16 August 13
Stop serving me Palinka
Friday 16 August 13
Ok, maybe one ...
Friday 16 August 13
What problems are we
trying to solve?
• Variable soup
Live
Save
textSetting 1
Setting 2 label
Database Database
Dev
TEST
test test test test
test test test test
test test test test
test test
node/4admin/config/foo
Welcome
This is real
content on the
live site that end
users are viewing
node/4
Save
old textSetting 1
Setting 2 label
admin/config/foo
Friday 16 August 13
Live
Save
textSetting 1
Setting 2 label
Database Database
Dev
TEST
test test test test
test test test test
test test test test
test test
node/4admin/config/foo
Welcome
This is real
content on the
live site that end
users are viewing
node/4
Save
old textSetting 1
Setting 2 label
admin/config/foo
Danger!
Want to bring over configuration
changes from dev, but not
overwrite live content!
What problems are we
trying to solve?
Friday 16 August 13
What problems are we
trying to solve?
variable_set()/variable_get()
ctools_export_object()/
ctools_export_load_object()
db_select()/db_update()/
db_delete()
$conf[...];
hook_update_N()
drush fu
http://www.flickr.com/photos/bean/322616749
napkins
Friday 16 August 13
Friday 16 August 13
The solution
• Files using theYAML specification
• Active and staging directory
• Cached in the database using a standard
cache interface
Friday 16 August 13
The anatomy of a
configuration file
Friday 16 August 13
system.site.yml
Friday 16 August 13
system.site.yml
Friday 16 August 13
system.site.yml
Friday 16 August 13
name: 'Configuration management'
mail: admin@example.com
slogan: 'makes Drupal 8 cex -y'
page:
403: ''
404: ''
front: node
system.site.yml
Friday 16 August 13
The API
Drupal::config()
->get()
->set()
->save()
Friday 16 August 13
Accessing data
Friday 16 August 13
name: 'Configuration management'
mail: admin@example.com
slogan: 'makes Drupal 8 cex -y'
page:
403: ''
404: ''
front: node
$site_name = Drupal::config('system.site')->get('name');
Friday 16 August 13
$page_data = Drupal::config('system.site')->get('page');
name: 'Configuration management'
mail: admin@example.com
slogan: 'makes Drupal 8 cex -y'
page:
403: ''
404: ''
front: node
Friday 16 August 13
$frontpage = Drupal::config('system.site')-
>get('page.front');
name: 'Configuration management'
mail: admin@example.com
slogan: 'makes Drupal 8 cex -y'
page:
403: ''
404: ''
front: node
Friday 16 August 13
$all_the_data = Drupal::config('system.site')->get();
name: 'Configuration management'
mail: admin@example.com
slogan: 'makes Drupal 8 cex -y'
page:
403: ''
404: ''
front: node
Friday 16 August 13
Saving data
Friday 16 August 13
name: 'CMI is good'
mail: admin@example.com
slogan: 'makes Drupal 8 cex -y'
page:
403: ''
404: ''
front: node
Drupal::config('system.site')
->set('name', 'CMI is good')
->save();
Friday 16 August 13
name: 'CMI is great'
mail: admin@example.com
slogan: 'makes Drupal 8 cex -y'
page:
403: access-denied
404: not-found
front: user
Drupal::config('system.site')
->set('name', 'CMI is great')
->set('page', array(
403 => 'access-denied',
404 => 'not-found',
front => 'user',
))
->save();
Friday 16 August 13
Friday 16 August 13
• system_settings_form is dead
• add your own submit callback
• you are responsible for saving configuration
• ship with default configuration file
simple settings
Friday 16 August 13
{system}
{date_format_locale}
{date_formats}
{date_format_type}
{field_config}
{field_config_instance}
{filter}
{filter_format}
{node_type} {role}{role_permission}
{variable}
{language}
Friday 16 August 13
Config all the things!
Friday 16 August 13
Config entities
Friday 16 August 13
use DrupalCoreConfigEntityConfigEntityBase;
use DrupalCoreAnnotationPlugin;
use DrupalCoreAnnotationTranslation;
/**
* Defines the contact category entity.
*
* @EntityType(
* id = "contact_category",
* label = @Translation("Category"),
* module = "contact",
* controllers = {
* controller_class = "DrupalcontactCategoryStorageController",
* list = "DrupalcontactCategoryListController",
* form = {
* "add" = "DrupalcontactCategoryFormController"
* "edit" = "DrupalcontactCategoryFormController"
* }
* }
* uri_callback = "contact_category_uri",
* config_prefix = "contact.category",
* entity_keys = {
* "id" = "id",
* "label" = "label",
* "uuid" = "uuid"
* }
* )
*/
class Category extends ConfigEntityBase implements CategoryInterface {
/**
* The category ID.Friday 16 August 13
use DrupalCoreConfigEntityConfigEntityBase;
use DrupalCoreAnnotationPlugin;
use DrupalCoreAnnotationTranslation;
/**
* Defines the contact category entity.
*
* @EntityType(
* id = "contact_category",
* label = @Translation("Category"),
* module = "contact",
* controllers = {
* controller_class = "DrupalcontactCategoryStorageController",
* list = "DrupalcontactCategoryListController",
* form = {
* "add" = "DrupalcontactCategoryFormController"
* "edit" = "DrupalcontactCategoryFormController"
* }
* }
* uri_callback = "contact_category_uri",
* config_prefix = "contact.category",
* entity_keys = {
* "id" = "id",
* "label" = "label",
* "uuid" = "uuid"
* }
* )
*/
class Category extends ConfigEntityBase implements CategoryInterface {
/**
* The category ID.Friday 16 August 13
namespace DrupalcontactPluginCoreEntity;
use DrupalCoreConfigEntityConfigEntityBase;
use DrupalCoreAnnotationPlugin;
use DrupalCoreAnnotationTranslation;
/**
* Defines the contact category entity.
*
* @Plugin(
* id = "contact_category",
* label = @Translation("Category"),
* module = "contact",
* controllers = {
* controller_class = "DrupalCoreConfigEntityConfigStorageController",
* list = "DrupalcontactCategoryListController",
* form = {
* "add" = "DrupalcontactCategoryFormController"
* }
* },
* uri_callback = "contact_category_uri",
* config_prefix = "contact.category",
* entity_keys = {
* "id" = "id",
* "label" = "label",
* "uuid" = "uuid"
* }
* )
*/
class Category extends ConfigEntityBase implements ContactInterface {
/**
* The category ID.
Friday 16 August 13
use DrupalCoreConfigEntityConfigEntityBase;
use DrupalCoreAnnotationPlugin;
use DrupalCoreAnnotationTranslation;
/**
* Defines the contact category entity.
*
* @EntityType(
* id = "contact_category",
* label = @Translation("Category"),
* module = "contact",
* controllers = {
* controller_class = "DrupalCoreConfigEntityConfigStorageController",
* list = "DrupalcontactCategoryListController",
* form = {
* "add" = "DrupalcontactCategoryFormController"
* "edit" = "DrupalcontactCategoryFormController"
* }
* }
* uri_callback = "contact_category_uri",
* config_prefix = "contact.category",
* entity_keys = {
* "id" = "id",
* "label" = "label",
* "uuid" = "uuid"
* }
* )
*/
class Category extends ConfigEntityBase implements ContactInterface {
/**
* The category ID.Friday 16 August 13
*/
class Category extends ConfigEntityBase {
/**
* The category ID.
*/
public $id;
/**
* The category UUID.
*/
public $uuid;
/**
* The category label.
*/
public $label;
/**
* List of recipient e-mail addresses.
*/
public $recipients = array();
/**
* An auto-reply message to send to the message author.
*/
public $reply = '';
/**
* Weight of this category (used for sorting).
*/
public $weight = 0;
}
Friday 16 August 13
id: feedback
uuid: de77e4f3-f94b-41a5-ad05-5c32fa08444f
label: 'Website feedback'
recipients:
- ''
reply: ''
weight: '0'
langcode: und
contact.category.feedback.yml
Friday 16 August 13
(config) entity API
• entity_load
• entity_save
• $object->any_method()
Friday 16 August 13
Deployment
Friday 16 August 13
Database
Development environment
Active
Directory
1
Friday 16 August 13
Database
Development environment
Active
Directory
1
Friday 16 August 13
Database
Development environment
Active
Directory
1
2
Friday 16 August 13
Database
Production environment
Staging
Directory
Active
Directory
3
admin/config/development/sync
Friday 16 August 13
Database
Production environment
Staging
Directory
Active
Directory
3
4
admin/config/development/sync
Friday 16 August 13
Demo time
• No partial imports !
Friday 16 August 13
Advanced workflows
• https://drupal.org/sandbox/dereine/2057465
Friday 16 August 13
Don’t hack core
Friday 16 August 13
Don’t hack active config
Friday 16 August 13
State API
Drupal::state()->set('update.last_check', $now);
//...
$last_check = state()->get('update.last_check') ?: 0;
Only useful for this environment? Use state().
Friday 16 August 13
Drush integration
Friday 16 August 13
Context system,
Events & Overrides
Friday 16 August 13
global $conf;
$conf['system.maintenance']['message'] =
'Sorry, our site is down now.';
Global overrides
Friday 16 August 13
class ConfigGlobalOverrideSubscriber implements
EventSubscriberInterface {
static function getSubscribedEvents() {
$events['config.init'][] = array('configInit',
30);
return $events;
}
public function configInit(ConfigEvent $event) {
global $conf;
$config = $event->getConfig();
if (isset($conf[$config->getName()])) {
$config->setOverride($conf[$config->getName()]);
}
}
}
Global overrides
Friday 16 August 13
Break out of contexts
// Enter the override-free context, so we can ensure no
overrides are applied.
config_context_enter('config.context.free');
// Get system site maintenance message text from the original
config.
$message = config('system.maintenance')->get('message');
// Leave the override-free context.
config_context_leave();
Friday 16 August 13
Get into contexts
// Enter a user specific context.
$context = config_context_enter("DrupaluserUserConfigContext");
// Set the account to use on the context.
$context->setAccount($account);
$mail_config = config('user.mail');
// Do stuff...
config_context_leave();
Friday 16 August 13
Language overrides
block.block.bartik.login.yml
id: bartik.login
uuid: 7012ebfd-7083-47ef-b...
weight: '0'
status: '1'
langcode: en
region: sidebar_first
plugin: user_login_block
settings:
label: 'User login'
module: user
label_display: visible
cache: '-1'
......
locale.hu.block.block.bartik.login.yml
settings:
label: 'Belépés'
locale.nl.block.block.bartik.login.yml
settings:
label: 'Inloggen'
Friday 16 August 13
Configuration schema
Friday 16 August 13
system.maintenance.yml
enabled: '0'
message: '@site is currently under maintenance. We
should be back shortly. Thank you for your patience.'
Friday 16 August 13
system.schema.yml
system.maintenance:
type: mapping
label: 'Maintenance mode'
mapping:
"enabled":
type: boolean
label: "Put site into maintenance mode"
"message":
type: text
label: "Message to display when in maintenance mode"
Friday 16 August 13
Basic scalar types from typed data
boolean:
label: 'Boolean'
class: 'DrupalCoreTypedDataTypeBoolean'
email:
label: 'Email'
class: 'DrupalCoreTypedDataTypeEmail'
integer:
label: 'Integer'
class: 'DrupalCoreTypedDataTypeInteger'
string:
label: 'String'
class: 'DrupalCoreTypedDataTypeString'
uri:
label: 'Uri'
class: 'DrupalCoreTypedDataTypeUri'
Friday 16 August 13
Basic data types for configuration
undefined:
label: 'Undefined'
class: 'DrupalCoreConfigSchemaProperty'
mapping:
label: Mapping
class: 'DrupalCoreConfigSchemaMapping'
sequence:
label: Sequence
class: 'DrupalCoreConfigSchemaSequence'
Friday 16 August 13
Simple extended data types
# Human readable string that must be plain text and editable
with a text field.
label:
type: string
label: 'Label'
# Internal Drupal path
path:
type: string
label: 'Path'
# Human readable string that can contain multiple lines of text
or HTML.
text:
type: string
label: 'Text'
Friday 16 August 13
Complex extended data type
# Mail text with subject and body parts.
mail:
type: mapping
label: "Mail"
mapping:
"subject":
type: text
label: "Subject"
"body":
type: text
label: "Body"
Friday 16 August 13
system.schema.yml
system.maintenance:
type: mapping
label: 'Maintenance mode'
mapping:
"enabled":
type: boolean
label: "Put site into maintenance mode"
"message":
type: text
label: "Message to display when in maintenance mode"
Friday 16 August 13
What does all this add up to?
$definition = Drupal::typedData()->getDefinition('system.maintenance');
array(
'label' => "Maintenance mode",
'class' => "DrupalCoreConfigSchemaMapping",
'mapping' => array(
'enabled' => array(
'type' => "boolean",
'label' => "Put site into maintenance mode",
),
'message' => array(
'type' => "text",
'label' => "Message to display when in maintenance mode",
),
),
);
Friday 16 August 13
Config inspector module
Friday 16 August 13
Advice for module
developers
• Config key names should have meaning
• Use config entities instead of tables
• Include config schema
Friday 16 August 13
• http://groups.drupal.org/cmi - Discussion
• http://v.gd/cmi_issues - Issues
• http://groups.drupal.org/core - Core announcements
• #drupal-cmi - Dedicated IRC channel
• http://drupal.org/core-mentoring-hours
Friday 16 August 13
Thanks
@heyrocker
@webchick
@moshe_weitzman
@GaborHojtsy
@alexpott
Friday 16 August 13

More Related Content

What's hot

Web Scraping with Python
Web Scraping with PythonWeb Scraping with Python
Web Scraping with PythonPaul Schreiber
 
Working with LifeDesks
Working with LifeDesksWorking with LifeDesks
Working with LifeDesksKatja Schulz
 
Assumptions: Check yo'self before you wreck yourself
Assumptions: Check yo'self before you wreck yourselfAssumptions: Check yo'self before you wreck yourself
Assumptions: Check yo'self before you wreck yourselfErin Shellman
 
Mastering the Project File
Mastering the Project FileMastering the Project File
Mastering the Project FileMichele Titolo
 
Using Search API, Search API Solr and Facets in Drupal 8
Using Search API, Search API Solr and Facets in Drupal 8Using Search API, Search API Solr and Facets in Drupal 8
Using Search API, Search API Solr and Facets in Drupal 8Websolutions Agency
 
Bib Data Experiment -- The GW Journey
Bib Data Experiment -- The GW JourneyBib Data Experiment -- The GW Journey
Bib Data Experiment -- The GW JourneyJ Shieh
 
Mastering the Project File (AltConf)
Mastering the Project File (AltConf)Mastering the Project File (AltConf)
Mastering the Project File (AltConf)Michele Titolo
 
Lone StarPHP 2013 - Building Web Apps from a New Angle
Lone StarPHP 2013 - Building Web Apps from a New AngleLone StarPHP 2013 - Building Web Apps from a New Angle
Lone StarPHP 2013 - Building Web Apps from a New AnglePablo Godel
 
前瞻性Web性能优化pwpo
前瞻性Web性能优化pwpo前瞻性Web性能优化pwpo
前瞻性Web性能优化pwpoMichael Zhang
 
Webinar - Windows Application Management with Puppet
Webinar - Windows Application Management with PuppetWebinar - Windows Application Management with Puppet
Webinar - Windows Application Management with PuppetOlinData
 
Legacy applications - 4Developes konferencja, Piotr Pasich
Legacy applications  - 4Developes konferencja, Piotr PasichLegacy applications  - 4Developes konferencja, Piotr Pasich
Legacy applications - 4Developes konferencja, Piotr PasichPiotr Pasich
 
Open Hack London - Introduction to YQL
Open Hack London - Introduction to YQLOpen Hack London - Introduction to YQL
Open Hack London - Introduction to YQLChristian Heilmann
 
Developing a Joomla 3.x Component using RAD/FOF - Joomladay UK 2014
Developing a Joomla 3.x Component using RAD/FOF - Joomladay UK 2014Developing a Joomla 3.x Component using RAD/FOF - Joomladay UK 2014
Developing a Joomla 3.x Component using RAD/FOF - Joomladay UK 2014Peter Martin
 

What's hot (15)

Web Scraping with Python
Web Scraping with PythonWeb Scraping with Python
Web Scraping with Python
 
Working with LifeDesks
Working with LifeDesksWorking with LifeDesks
Working with LifeDesks
 
Assumptions: Check yo'self before you wreck yourself
Assumptions: Check yo'self before you wreck yourselfAssumptions: Check yo'self before you wreck yourself
Assumptions: Check yo'self before you wreck yourself
 
Git setuplinux
Git setuplinuxGit setuplinux
Git setuplinux
 
Mastering the Project File
Mastering the Project FileMastering the Project File
Mastering the Project File
 
Using Search API, Search API Solr and Facets in Drupal 8
Using Search API, Search API Solr and Facets in Drupal 8Using Search API, Search API Solr and Facets in Drupal 8
Using Search API, Search API Solr and Facets in Drupal 8
 
Bib Data Experiment -- The GW Journey
Bib Data Experiment -- The GW JourneyBib Data Experiment -- The GW Journey
Bib Data Experiment -- The GW Journey
 
Mastering the Project File (AltConf)
Mastering the Project File (AltConf)Mastering the Project File (AltConf)
Mastering the Project File (AltConf)
 
Lone StarPHP 2013 - Building Web Apps from a New Angle
Lone StarPHP 2013 - Building Web Apps from a New AngleLone StarPHP 2013 - Building Web Apps from a New Angle
Lone StarPHP 2013 - Building Web Apps from a New Angle
 
Empezando con Twig
Empezando con TwigEmpezando con Twig
Empezando con Twig
 
前瞻性Web性能优化pwpo
前瞻性Web性能优化pwpo前瞻性Web性能优化pwpo
前瞻性Web性能优化pwpo
 
Webinar - Windows Application Management with Puppet
Webinar - Windows Application Management with PuppetWebinar - Windows Application Management with Puppet
Webinar - Windows Application Management with Puppet
 
Legacy applications - 4Developes konferencja, Piotr Pasich
Legacy applications  - 4Developes konferencja, Piotr PasichLegacy applications  - 4Developes konferencja, Piotr Pasich
Legacy applications - 4Developes konferencja, Piotr Pasich
 
Open Hack London - Introduction to YQL
Open Hack London - Introduction to YQLOpen Hack London - Introduction to YQL
Open Hack London - Introduction to YQL
 
Developing a Joomla 3.x Component using RAD/FOF - Joomladay UK 2014
Developing a Joomla 3.x Component using RAD/FOF - Joomladay UK 2014Developing a Joomla 3.x Component using RAD/FOF - Joomladay UK 2014
Developing a Joomla 3.x Component using RAD/FOF - Joomladay UK 2014
 

Viewers also liked

Drupal 8 for site builders
Drupal 8 for site buildersDrupal 8 for site builders
Drupal 8 for site buildersswentel
 
Drupal 8 configuration management
Drupal 8 configuration managementDrupal 8 configuration management
Drupal 8 configuration managementAlexander Tkachev
 
Drupal 8 Configuration Management
Drupal 8 Configuration ManagementDrupal 8 Configuration Management
Drupal 8 Configuration ManagementPhilip Norton
 
Display Suite @ DrupalCamp Stockholm 2013
Display Suite @ DrupalCamp Stockholm 2013Display Suite @ DrupalCamp Stockholm 2013
Display Suite @ DrupalCamp Stockholm 2013swentel
 
Drupal 8 Configuration Management with Features
Drupal 8 Configuration Management with FeaturesDrupal 8 Configuration Management with Features
Drupal 8 Configuration Management with FeaturesNuvole
 
Hooks and Events in Drupal 8
Hooks and Events in Drupal 8Hooks and Events in Drupal 8
Hooks and Events in Drupal 8Nida Ismail Shah
 

Viewers also liked (6)

Drupal 8 for site builders
Drupal 8 for site buildersDrupal 8 for site builders
Drupal 8 for site builders
 
Drupal 8 configuration management
Drupal 8 configuration managementDrupal 8 configuration management
Drupal 8 configuration management
 
Drupal 8 Configuration Management
Drupal 8 Configuration ManagementDrupal 8 Configuration Management
Drupal 8 Configuration Management
 
Display Suite @ DrupalCamp Stockholm 2013
Display Suite @ DrupalCamp Stockholm 2013Display Suite @ DrupalCamp Stockholm 2013
Display Suite @ DrupalCamp Stockholm 2013
 
Drupal 8 Configuration Management with Features
Drupal 8 Configuration Management with FeaturesDrupal 8 Configuration Management with Features
Drupal 8 Configuration Management with Features
 
Hooks and Events in Drupal 8
Hooks and Events in Drupal 8Hooks and Events in Drupal 8
Hooks and Events in Drupal 8
 

Similar to Drupal 8 configuration system for coders and site builders - Drupalaton 2013

How to write better code: in-depth best practices for writing readable, simpl...
How to write better code: in-depth best practices for writing readable, simpl...How to write better code: in-depth best practices for writing readable, simpl...
How to write better code: in-depth best practices for writing readable, simpl...Oursky
 
How to write better code: in-depth best practices for writing readable, simpl...
How to write better code: in-depth best practices for writing readable, simpl...How to write better code: in-depth best practices for writing readable, simpl...
How to write better code: in-depth best practices for writing readable, simpl...Jane Chung
 
What is this DI and AOP stuff anyway...
What is this DI and AOP stuff anyway...What is this DI and AOP stuff anyway...
What is this DI and AOP stuff anyway...Richard McIntyre
 
Drupal 8 Services And Dependency Injection
Drupal 8 Services And Dependency InjectionDrupal 8 Services And Dependency Injection
Drupal 8 Services And Dependency InjectionPhilip Norton
 
Drupal 8 Every Day: An Intro to Developing With Drupal 8
Drupal 8 Every Day: An Intro to Developing With Drupal 8Drupal 8 Every Day: An Intro to Developing With Drupal 8
Drupal 8 Every Day: An Intro to Developing With Drupal 8Acquia
 
Auto-loading of Drupal CCK Nodes
Auto-loading of Drupal CCK NodesAuto-loading of Drupal CCK Nodes
Auto-loading of Drupal CCK Nodesnihiliad
 
CDI do básico ao avançado
CDI do básico ao avançadoCDI do básico ao avançado
CDI do básico ao avançadoAlberto Souza
 
Debugging in drupal 8
Debugging in drupal 8Debugging in drupal 8
Debugging in drupal 8Allie Jones
 
Magento Attributes - Fresh View
Magento Attributes - Fresh ViewMagento Attributes - Fresh View
Magento Attributes - Fresh ViewAlex Gotgelf
 
CodeIgniter PHP MVC Framework
CodeIgniter PHP MVC FrameworkCodeIgniter PHP MVC Framework
CodeIgniter PHP MVC FrameworkBo-Yi Wu
 
This upload requires better support for ODP format
This upload requires better support for ODP formatThis upload requires better support for ODP format
This upload requires better support for ODP formatForest Mars
 
Keeping it small - Getting to know the Slim PHP micro framework
Keeping it small - Getting to know the Slim PHP micro frameworkKeeping it small - Getting to know the Slim PHP micro framework
Keeping it small - Getting to know the Slim PHP micro frameworkJeremy Kendall
 
Kicking off with Zend Expressive and Doctrine ORM (PHP UK 2017)
Kicking off with Zend Expressive and Doctrine ORM (PHP UK 2017)Kicking off with Zend Expressive and Doctrine ORM (PHP UK 2017)
Kicking off with Zend Expressive and Doctrine ORM (PHP UK 2017)James Titcumb
 
Kicking off with Zend Expressive and Doctrine ORM (Sunshine PHP 2017)
Kicking off with Zend Expressive and Doctrine ORM (Sunshine PHP 2017)Kicking off with Zend Expressive and Doctrine ORM (Sunshine PHP 2017)
Kicking off with Zend Expressive and Doctrine ORM (Sunshine PHP 2017)James Titcumb
 
Convert modules from 6.x to 7.x
Convert modules from 6.x to 7.xConvert modules from 6.x to 7.x
Convert modules from 6.x to 7.xJoão Ventura
 

Similar to Drupal 8 configuration system for coders and site builders - Drupalaton 2013 (20)

How to write better code: in-depth best practices for writing readable, simpl...
How to write better code: in-depth best practices for writing readable, simpl...How to write better code: in-depth best practices for writing readable, simpl...
How to write better code: in-depth best practices for writing readable, simpl...
 
How to write better code: in-depth best practices for writing readable, simpl...
How to write better code: in-depth best practices for writing readable, simpl...How to write better code: in-depth best practices for writing readable, simpl...
How to write better code: in-depth best practices for writing readable, simpl...
 
What is this DI and AOP stuff anyway...
What is this DI and AOP stuff anyway...What is this DI and AOP stuff anyway...
What is this DI and AOP stuff anyway...
 
Doctrine in FLOW3
Doctrine in FLOW3Doctrine in FLOW3
Doctrine in FLOW3
 
Drupal 8 Services And Dependency Injection
Drupal 8 Services And Dependency InjectionDrupal 8 Services And Dependency Injection
Drupal 8 Services And Dependency Injection
 
Drupal 8 Every Day: An Intro to Developing With Drupal 8
Drupal 8 Every Day: An Intro to Developing With Drupal 8Drupal 8 Every Day: An Intro to Developing With Drupal 8
Drupal 8 Every Day: An Intro to Developing With Drupal 8
 
Demystifying Maven
Demystifying MavenDemystifying Maven
Demystifying Maven
 
Auto-loading of Drupal CCK Nodes
Auto-loading of Drupal CCK NodesAuto-loading of Drupal CCK Nodes
Auto-loading of Drupal CCK Nodes
 
CDI do básico ao avançado
CDI do básico ao avançadoCDI do básico ao avançado
CDI do básico ao avançado
 
Debugging in drupal 8
Debugging in drupal 8Debugging in drupal 8
Debugging in drupal 8
 
Drupal 8 migrate!
Drupal 8 migrate!Drupal 8 migrate!
Drupal 8 migrate!
 
Magento Attributes - Fresh View
Magento Attributes - Fresh ViewMagento Attributes - Fresh View
Magento Attributes - Fresh View
 
CodeIgniter PHP MVC Framework
CodeIgniter PHP MVC FrameworkCodeIgniter PHP MVC Framework
CodeIgniter PHP MVC Framework
 
Angular 2 introduction
Angular 2 introductionAngular 2 introduction
Angular 2 introduction
 
This upload requires better support for ODP format
This upload requires better support for ODP formatThis upload requires better support for ODP format
This upload requires better support for ODP format
 
Keeping it small - Getting to know the Slim PHP micro framework
Keeping it small - Getting to know the Slim PHP micro frameworkKeeping it small - Getting to know the Slim PHP micro framework
Keeping it small - Getting to know the Slim PHP micro framework
 
Kicking off with Zend Expressive and Doctrine ORM (PHP UK 2017)
Kicking off with Zend Expressive and Doctrine ORM (PHP UK 2017)Kicking off with Zend Expressive and Doctrine ORM (PHP UK 2017)
Kicking off with Zend Expressive and Doctrine ORM (PHP UK 2017)
 
Mongo-Drupal
Mongo-DrupalMongo-Drupal
Mongo-Drupal
 
Kicking off with Zend Expressive and Doctrine ORM (Sunshine PHP 2017)
Kicking off with Zend Expressive and Doctrine ORM (Sunshine PHP 2017)Kicking off with Zend Expressive and Doctrine ORM (Sunshine PHP 2017)
Kicking off with Zend Expressive and Doctrine ORM (Sunshine PHP 2017)
 
Convert modules from 6.x to 7.x
Convert modules from 6.x to 7.xConvert modules from 6.x to 7.x
Convert modules from 6.x to 7.x
 

Recently uploaded

Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2Hyundai Motor Group
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 

Recently uploaded (20)

Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
The transition to renewables in India.pdf
The transition to renewables in India.pdfThe transition to renewables in India.pdf
The transition to renewables in India.pdf
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 

Drupal 8 configuration system for coders and site builders - Drupalaton 2013