11.1 依赖注入回顾
在之前的课程里,我们介绍了 服务(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)];
}
}