- Drupal 8 Module Development
- Daniel Sipos
- 510字
- 2021-07-02 12:22:39
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 (our module's namespace root in a file naturally called HelloWorldSalutation.php):
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') >= 00 && (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.
Now that we have our class, it's time to define it as a service. We don't want to be going 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: hello_world.services.yml. 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.
- Oracle 12c中文版數據庫管理、應用與開發實踐教程 (清華電腦學堂)
- AngularJS深度剖析與最佳實踐
- 老“碼”識途
- C語言程序設計
- TypeScript項目開發實戰
- SAP BusinessObjects Dashboards 4.1 Cookbook
- Swift細致入門與最佳實踐
- Mastering openFrameworks:Creative Coding Demystified
- Geospatial Development By Example with Python
- Mastering Docker
- Python應用與實戰
- Mastering ASP.NET Core 2.0
- HTML5與CSS3權威指南(第2版·下冊)
- Java從入門到精通(第7版)
- Java實例精通