KEMBAR78
Drupal intro for Symfony developers | PDF
Drupal for Symfony Developers Samuel Solís - @estoyausenteSamuel Solís - @estoyausente
Drupal for Symfony
Developers
By Samuel Solís
Drupal for Symfony Developers Samuel Solís - @estoyausente
A PHP CMS
Samuel Solís - @estoyausente
¿What is Drupal?
Open
Source
Highly
customizable
Usually called
as CMF
Drupal for Symfony Developers Samuel Solís - @estoyausente
Main features
Security Performance
& Scaling
Multilingual Marketing
automation
Content
management Personalization
Content as a
Service
Drupal for Symfony Developers Samuel Solís - @estoyausente
A lot of contrib modules
Drupal for Symfony Developers Samuel Solís - @estoyausente
Note about Drupal versions
<D7 D7 D8
Old like a
mountain, now
unpredictable
Mature, important in
the Drupal story
Young, different, the
real hero
Drupal for Symfony Developers Samuel Solís - @estoyausente
Drupal install
Usually LAMP environment but many variations possible.
1. Download the project https://github.com/drupal/recommended-project
2. Composer install
3. Install the database and configuration
a. Go to the site and follow the install wizard
b. Using drush with the command drush site-install
Drupal for Symfony Developers Samuel Solís - @estoyausente
Drupal for Symfony Developers Samuel Solís - @estoyausente
Drupal for Symfony Developers Samuel Solís - @estoyausente
Drupal for Symfony Developers Samuel Solís - @estoyausente
Drupal for Symfony Developers Samuel Solís - @estoyausente
Drupal content structure
Drupal for Symfony Developers Samuel Solís - @estoyausente
Entity
Config
Entity
Content
Entity
Views
Languages
...
Node
Comment
...
Article
Basic Page
...
*.yml
Drupal for Symfony Developers Samuel Solís - @estoyausente
A config entity example: Views
Drupal for Symfony Developers Samuel Solís - @estoyausente
A content entity example: Nodes
Drupal for Symfony Developers Samuel Solís - @estoyausente
Drupal UI tour
Drupal for Symfony Developers Samuel Solís - @estoyausente
Entity Types
Bulk operations
Entity base
fields
Bundle
Drupal for Symfony Developers Samuel Solís - @estoyausente
Regions
Blocks
Click!
Drupal for Symfony Developers Samuel Solís - @estoyausente
Block configuration
Block visibility
Drupal for Symfony Developers Samuel Solís - @estoyausente
Module types
Drupal for Symfony Developers Samuel Solís - @estoyausente
Module configurations
Drupal for Symfony Developers Samuel Solís - @estoyausente
User Roles
Module
permissions
Drupal for Symfony Developers Samuel Solís - @estoyausente
Some awesome
module suites
Drupal for Symfony Developers Samuel Solís - @estoyausente
Media
Drupal for Symfony Developers Samuel Solís - @estoyausente
Workflow
Drupal for Symfony Developers Samuel Solís - @estoyausente
REST & JSON API
Drupal for Symfony Developers Samuel Solís - @estoyausente
Migrate
Drupal for Symfony Developers Samuel Solís - @estoyausente
Drush
Drupal for Symfony Developers Samuel Solís - @estoyausente
Drupal for Symfony Developers Samuel Solís - @estoyausente
Drupal structure
composer.json
composer.lock
config/
.git
LICENSE
README.md
scripts/
.travis.yml
vendor/
web/
autoload.php
core/
error.html
error.php
favicon.ico
index.php
libraries/
modules/
profiles/
robots.txt
sites/
themes/
update.php
web.config
contrib/
custom/
[shared/]
Drupal for Symfony Developers Samuel Solís - @estoyausente
Drupal module structure
config/
src/
templates/
tests/
migrations/
modules/
module_name.module
module_name.info.yml
module_name.*.yml
README.md
Drupal for Symfony Developers Samuel Solís - @estoyausente
Drupal theme structure
config/
templates/
images/
css/
js/
images/
theme_name.info.yml
theme_name.libraries.yml
theme_name.theme
A theme is an special module,
but a module. The structure is
the same.
Drupal for Symfony Developers Samuel Solís - @estoyausente
Some random code snippets
Drupal for Symfony Developers Samuel Solís - @estoyausente
bb_data_layer.routing.yml
bb_data_layer.provider.autocomplete:
path: '/provider-autocomplete/{search_field_name}/{return_field_name}'
defaults:
_controller:
'Drupalbb_data_layerControllerAutocompleteController::providerAutocomp
lete'
_format: json
requirements:
_access: 'TRUE'
...
Drupal for Symfony Developers Samuel Solís - @estoyausente
bb_data_layer.services.yml
services:
bb_data_layer.marketplace_wines:
class: Drupalbb_data_layerMarketplaceWines
bb_data_layer.product_sales:
class: Drupalbb_data_layerProductSales
...
Drupal for Symfony Developers Samuel Solís - @estoyausente
AutocompleteController.php
<?php
namespace Drupalbb_data_layerController;
use DrupalCoreControllerControllerBase;
...
class AutocompleteController extends ControllerBase {
public function providerAutocomplete(Request $request, $search_field_name,
$return_field_name) {
$return = []; // some stuff
return new JsonResponse($return);
}
}
Drupal for Symfony Developers Samuel Solís - @estoyausente
HazteSocio.php
/**
* Provides an example block.
* @Block(
* id = "bb_blocks_haztesocio",
* admin_label = @Translation("Register now"),
* )
*/
class HazteSocio extends BlockBase {
public function build() {
return [
'forms' => [
'facebook' => $this->facebook,
'#type' => 'container',
'#attributes' => [
'class' => ['user-register-input-wrapper'],
],
]
}
}
}
Drupal for Symfony Developers Samuel Solís - @estoyausente
Symfony Components in D8
● ClassLoader
● CssSelector
● DependencyInjection
● EventDispatcher
● HttpFoundation
● HttpKernel
● Process
● Routing
● Serializer
● Translation
● Validator
● Yaml
Drupal for Symfony Developers Samuel Solís - @estoyausente
DependencyInjection & Services
$logger = $container->get('logger');
$entityManager = $container->get(entity.orm.entity_manager');
Drupal for Symfony Developers Samuel Solís - @estoyausente
Event & Event dispatcher
class UserLoginEvent extends Event {
const EVENT_NAME = 'bb_auth_user_login';
public $account;
public function __construct(UserInterface $account) {
$this->account = $account;
}
}
Drupal for Symfony Developers Samuel Solís - @estoyausente
Event & Event dispatcher
$event = new UserLoginEvent($account);
// Get the event_dispatcher service and dispatch the event.
$event_dispatcher = Drupal::service('event_dispatcher');
$event_dispatcher->dispatch(UserLoginEvent::EVENT_NAME, $event);
Drupal for Symfony Developers Samuel Solís - @estoyausente
Event & Event dispatcher
class BbAuthApiRequest implements EventSubscriberInterface {
public function onAPIRequest(BbRestRequest $event) {}
public static function getSubscribedEvents() {
$events[BbRestRequest::BB_REST_REQUEST][] = ['onAPIRequest'];
return $events;
}
}
Drupal for Symfony Developers Samuel Solís - @estoyausente
Ya casi acabamos
Drupal for Symfony Developers Samuel Solís - @estoyausente
Drupal community & support
● Drupalchat.eu (Rocket chat) -
Spanish channel #drupal-es
● Groups.drupal.org
● Drupal.slack.com
● drupal.stackexchange.com
Day to day Events
Drupal for Symfony Developers Samuel Solís - @estoyausente
Thank for coming!

Drupal intro for Symfony developers

  • 1.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausenteSamuel Solís - @estoyausente Drupal for Symfony Developers By Samuel Solís
  • 2.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente A PHP CMS Samuel Solís - @estoyausente ¿What is Drupal? Open Source Highly customizable Usually called as CMF
  • 3.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente Main features Security Performance & Scaling Multilingual Marketing automation Content management Personalization Content as a Service
  • 4.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente A lot of contrib modules
  • 5.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente Note about Drupal versions <D7 D7 D8 Old like a mountain, now unpredictable Mature, important in the Drupal story Young, different, the real hero
  • 6.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente Drupal install Usually LAMP environment but many variations possible. 1. Download the project https://github.com/drupal/recommended-project 2. Composer install 3. Install the database and configuration a. Go to the site and follow the install wizard b. Using drush with the command drush site-install
  • 7.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente
  • 8.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente
  • 9.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente
  • 10.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente
  • 11.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente Drupal content structure
  • 12.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente Entity Config Entity Content Entity Views Languages ... Node Comment ... Article Basic Page ... *.yml
  • 13.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente A config entity example: Views
  • 14.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente A content entity example: Nodes
  • 15.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente Drupal UI tour
  • 16.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente Entity Types Bulk operations Entity base fields Bundle
  • 17.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente Regions Blocks Click!
  • 18.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente Block configuration Block visibility
  • 19.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente Module types
  • 20.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente Module configurations
  • 21.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente User Roles Module permissions
  • 22.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente Some awesome module suites
  • 23.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente Media
  • 24.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente Workflow
  • 25.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente REST & JSON API
  • 26.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente Migrate
  • 27.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente Drush
  • 28.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente
  • 29.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente Drupal structure composer.json composer.lock config/ .git LICENSE README.md scripts/ .travis.yml vendor/ web/ autoload.php core/ error.html error.php favicon.ico index.php libraries/ modules/ profiles/ robots.txt sites/ themes/ update.php web.config contrib/ custom/ [shared/]
  • 30.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente Drupal module structure config/ src/ templates/ tests/ migrations/ modules/ module_name.module module_name.info.yml module_name.*.yml README.md
  • 31.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente Drupal theme structure config/ templates/ images/ css/ js/ images/ theme_name.info.yml theme_name.libraries.yml theme_name.theme A theme is an special module, but a module. The structure is the same.
  • 32.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente Some random code snippets
  • 33.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente bb_data_layer.routing.yml bb_data_layer.provider.autocomplete: path: '/provider-autocomplete/{search_field_name}/{return_field_name}' defaults: _controller: 'Drupalbb_data_layerControllerAutocompleteController::providerAutocomp lete' _format: json requirements: _access: 'TRUE' ...
  • 34.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente bb_data_layer.services.yml services: bb_data_layer.marketplace_wines: class: Drupalbb_data_layerMarketplaceWines bb_data_layer.product_sales: class: Drupalbb_data_layerProductSales ...
  • 35.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente AutocompleteController.php <?php namespace Drupalbb_data_layerController; use DrupalCoreControllerControllerBase; ... class AutocompleteController extends ControllerBase { public function providerAutocomplete(Request $request, $search_field_name, $return_field_name) { $return = []; // some stuff return new JsonResponse($return); } }
  • 36.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente HazteSocio.php /** * Provides an example block. * @Block( * id = "bb_blocks_haztesocio", * admin_label = @Translation("Register now"), * ) */ class HazteSocio extends BlockBase { public function build() { return [ 'forms' => [ 'facebook' => $this->facebook, '#type' => 'container', '#attributes' => [ 'class' => ['user-register-input-wrapper'], ], ] } } }
  • 37.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente Symfony Components in D8 ● ClassLoader ● CssSelector ● DependencyInjection ● EventDispatcher ● HttpFoundation ● HttpKernel ● Process ● Routing ● Serializer ● Translation ● Validator ● Yaml
  • 38.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente DependencyInjection & Services $logger = $container->get('logger'); $entityManager = $container->get(entity.orm.entity_manager');
  • 39.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente Event & Event dispatcher class UserLoginEvent extends Event { const EVENT_NAME = 'bb_auth_user_login'; public $account; public function __construct(UserInterface $account) { $this->account = $account; } }
  • 40.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente Event & Event dispatcher $event = new UserLoginEvent($account); // Get the event_dispatcher service and dispatch the event. $event_dispatcher = Drupal::service('event_dispatcher'); $event_dispatcher->dispatch(UserLoginEvent::EVENT_NAME, $event);
  • 41.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente Event & Event dispatcher class BbAuthApiRequest implements EventSubscriberInterface { public function onAPIRequest(BbRestRequest $event) {} public static function getSubscribedEvents() { $events[BbRestRequest::BB_REST_REQUEST][] = ['onAPIRequest']; return $events; } }
  • 42.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente Ya casi acabamos
  • 43.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente Drupal community & support ● Drupalchat.eu (Rocket chat) - Spanish channel #drupal-es ● Groups.drupal.org ● Drupal.slack.com ● drupal.stackexchange.com Day to day Events
  • 44.
    Drupal for SymfonyDevelopers Samuel Solís - @estoyausente Thank for coming!