官术网_书友最值得收藏!

The HelloWorldSalutation service

Now that we have a general idea as to what a service is, let's create one to see all this in practice.

As I mentioned earlier, I want my greetings to be more dynamic, that is, I want the salutation to depend on the time of day. So, we will create a (HelloWorldSalutation) class that is responsible for doing that and place it in the /src folder (or module’s namespace root):

namespace Drupal\hello_world;

use Drupal\Core\StringTranslation\StringTranslationTrait;

/**
* Prepares the salutation to the world.
*/
class HelloWorldSalutation {

use StringTranslationTrait;

/**
* Returns the salutation
*/
public function getSalutation() {
$time = new \DateTime();
if ((int) $time->format('G') >= 06 && (int) $time->format('G') < 12) {
return $this->t('Good morning world');
}

if ((int) $time->format('G') >= 12 && (int) $time->format('G') < 18) {
return $this->t('Good afternoon world');
}

if ((int) $time->format('G') >= 18) {
return $this->t('Good evening world');
}
}
}

By now, I assume that the namespace business is clear, so I won't explain it again. Let's see what else we did here. First, we used the StringTranslationTrait in order to expose the translation function (I will explain this later on). Second, we created a rudimentary method that returns a different greeting depending on the time of day. This could probably have been done better, but for the purposes of this example, it works just fine.

If there is any reason to believe that you will have more than one salutation services, you should create an interface this class can implement. This way, you'll be able to always type hint that interface instead of the class and make the implementations swappable.

Now that we have our class, it's time to define it as a service. We don't want to be going all new HelloWorldSalutation() all over our code base, but instead, register it with the Service Container and use it from there as a dependency. How do we do that?

First, we will need, yet again, a YAML file in our hello_world.services.yml module. This file starts with the services key, under which will be all the service definitions of our module. So, our file will look like this (for now):

services:
hello_world.salutation:
class: Drupal\hello_world\HelloWorldSalutation

This is the simplest possible service definition you can have. You give it a name (hello_world.salutation) and map it to a class to be instantiated. It is a standard practice to have the service name start with your module name.

Once we clear the cache, the service will get registered with the Service Container and will be available to use.

主站蜘蛛池模板: 南城县| 云林县| 平泉县| 昆明市| 濮阳市| 枣庄市| 本溪市| 玛多县| 宁津县| 清水河县| 三亚市| 巴彦淖尔市| 新巴尔虎右旗| 工布江达县| 嵊泗县| 呈贡县| 称多县| 香河县| 武义县| 诸城市| 大理市| 铁力市| 沅陵县| 东乌珠穆沁旗| 龙门县| 美姑县| 黄大仙区| 伊川县| 双桥区| 珲春市| 阜南县| 河津市| 德格县| 天长市| 江阴市| 大连市| 嵩明县| 泉州市| 砀山县| 基隆市| 兰考县|