原文地址:
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)]; } }