DescriptionTemplateTrait.php

Same filename in other branches
  1. 4.0.x src/Utility/DescriptionTemplateTrait.php

Namespace

Drupal\examples\Utility

File

src/Utility/DescriptionTemplateTrait.php

View source
<?php

namespace Drupal\examples\Utility;


/**
 * Trait to implement a "drop-in" template for Example's controllers.
 *
 * This is a simple utility trait to allow our example modules to put their
 * explanatory text into a twig template, and pass any variables needed
 * for the template.  By default, the template will be named
 * 'description.html.twig, and should be placed in the module's templates/
 * directory.
 *
 * These templates should be localizable as is usual for Drupal's Twig
 * templates, using the {% trans } and {% endtrans %} tags to block out the
 * text that needs to be passed to the translator. Modules using this
 * trait should:
 *
 *  - Implement the getModuleName() member function.
 *  - Override the getDescriptionVariables() member function in order to
 *    pass variables to Twig needed to render your template.
 *
 * @see \Drupal\Core\Render\Element\InlineTemplate
 * @see https://www.drupal.org/developing/api/8/localization
 */
trait DescriptionTemplateTrait {
    
    /**
     * Generate a render array with our templated content.
     *
     * @return array
     *   A render array.
     */
    public function description() {
        $template_path = $this->getDescriptionTemplatePath();
        $template = file_get_contents($template_path);
        $build = [
            'description' => [
                '#type' => 'inline_template',
                '#template' => $template,
                '#context' => $this->getDescriptionVariables(),
            ],
        ];
        return $build;
    }
    
    /**
     * Name of our module.
     *
     * @return string
     *   A module name.
     */
    protected abstract function getModuleName();
    
    /**
     * Variables to act as context to the twig template file.
     *
     * @return array
     *   Associative array that defines context for a template.
     */
    protected function getDescriptionVariables() {
        $variables = [
            'module' => $this->getModuleName(),
        ];
        return $variables;
    }
    
    /**
     * Get full path to the template.
     *
     * @return string
     *   Path string.
     */
    protected function getDescriptionTemplatePath() {
        return \Drupal::service('extension.list.module')->getPath($this->getModuleName()) . '/templates/description.html.twig';
    }

}

Traits

Title Deprecated Summary
DescriptionTemplateTrait Trait to implement a "drop-in" template for Example's controllers.