Drupal 8 模块开发 11.1 : 依赖注入回顾

蒲公英 提交于 周四, 08/17/2017 - 17:43
Drupal8模块开发

原文地址:
https://docs.acquia.com/articles/drupal-8-review-dependency-injection  


在之前的课程里,我们介绍了 服务(services),控制器(controllers)和插件(plugins)几种模式。在这些模式里我们演示了怎样使用依赖注入。在本回顾里,我们提供一些简单的例子,讨论下怎样使用 PhpStorm 帮助我们使用这些模式。  

安装基础例子模块

我们将创建包含两个服务,一个控制器和一个区块插件的 di_example 模块。我们首先创建不涉及依赖注入的基础部分: .info.yml 和 .routing.yml 文件,以及一个服务。这个服务不依赖其他的服务。  

di_example.info.yml

name: Dependency Injection Example
type: module
description: Examples on how to use dependency injection
core: 8.x
package: Examples

 

di_example.routing.yml

这个文件里,我们会有一个生成页面的控制器,它提供一个输出信息,我们叫它交谈(conversation)。交谈关于用户的情绪(mood )。

di_example.conversation_mood:
  path: '/examples/conversation/mood'
  defaults:
    _controller: '\Drupal\di_example\Controller\DIController::conversationAboutMood'
  requirements:
    _access: 'TRUE'

 

di_example.services.yml

这个服务用于注入我们的其他组件。它通过一个随机情绪生成系统提供一个情绪。我们会提供一个情绪列表以及一个用于返回随机情绪的 getMood() 方法。

services:
  # A service that will let us get a mood.
  di_example.mood_ring:
    class: Drupal\di_example\DIMoodRing

这个文件提供创建心情的代码(src/DIMoodRing.php):

下载文件

<?php
/**
 * @file Contains \Drupal\di_example\DIMoodRing
 */

namespace Drupal\di_example;

/**
 * A Service for reading a mood from a mood ring.
 *
 * This service does not have any dependencies.
 */
class DIMoodRing {
  protected $moods = [
    0 => 'Very Sad',
    1 => 'Sad',
    2 => 'So-so',
    3 => 'Happy',
    4 => 'Very Happy',
  ];

  /**
   * Returns a string that tells the user's current mood.
   *
   * @return string
   */
  public function getMood() {
    return $this->moods[rand(0,4)];
  }
}