• Home
  • Contact
symfony_drupal.jpg

Porting Symfony Acme Demo Bundle as a Drupal 8 Module

Jesus Manuel Olivas
March 04, 2014

The purpose of this post is to build a basic "Hello World Drupal" module in Drupal 8 porting the Acme Demo Bundle from Symfony 2 as a Drupal 8 module.

You can see the files and their content below.

Directory structure and files on this module

acme/ ├── acme.info.yml ├── acme.module ├── acme.routing.yml ├── lib │   └── Drupal │   └── acme │   └── Controller │   └── DemoController.php └── templates ├── base.html.twig └── hello.html.twig

acme.module

<?php // Drupal needs this file even if is empty

acme.info.yml

name: Acme type: module description: 'Acme Demo Module' package: Sample core: 8.x

acme.routing.yml

acme_hello_name: path: '/acme/hello/{name}' defaults: _content: '\Drupal\acme\Controller\DemoController::helloAction' _title: 'Acme Demo Module' requirements: _permission: "view content"

lib/Drupal/acme/Controller/DemoController.php

<?php namespace Drupal\acme\Controller; use Drupal\Core\Controller\ControllerBase; use Drupal\Core\DependencyInjection\ContainerInjectionInterface; use Symfony\Component\DependencyInjection\ContainerInterface; use Drupal\Core\Template\TwigEnvironment; /** * DemoController Controller */ class DemoController extends ControllerBase implements ContainerInjectionInterface { /** * @var TwigEnvironment */ protected $twig; /** * Constructor * * @param TwigEnvironment $twig */ public function __construct(TwigEnvironment $twig) { $this->twig = $twig; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container) { return new static($container->get('twig')); } /** * helloAction * * @param String $name */ public function helloAction($name) { $twigFilePath = drupal_get_path('module', 'acme') . '/templates/hello.html.twig'; $template = $this->twig->loadTemplate($twigFilePath); return $template->render(array('name' => $name)); } }

/modules/acme/templates/hello.html.twig

{% extends '/modules/acme/templates/base.html.twig' %} {% block basic %} <h1>Hello {{ name }}!</h1> {% endblock %}

/modules/acme/templates/base.html.twig

<div class="acme-hello-base"> {% block basic %}   <h1>No override data yet...</h1> {% endblock %} </div>

How to use and test it:

Clone repo at modules directory located at the root of your Drupal Installation

$ cd drupal8.dev/modules $ git clone https://github.com/hechoendrupal/acme.git

Enable module using drush

$ drush en -y acme

You can check the source code for this Drupal 8 Acme Demo Module at the following github repo
https://github.com/hechoendrupal/acme

We are CMS specialist and Headless is our passion

Our team has several years of experience working with traditional CMS as Drupal and Wordpress and more than a couple of years using those systems as Headless CMS and providing integrations with modern front-end tools as GatsbyJS, NextJS and others.
Let's talk