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

Service dependencies

In the previous section we created a form that allows administrators to set a custom salutation message to be shown on the page. This message was stored in a configuration object that we can now load in our HelloWorldSalutation service. So, let's do just that in a two-step process.

First, we will need to alter our service definition to give our service an argument—the Drupal 8 configuration factory (the service responsible for loading config objects). This is how our service definition should look now:

hello_world.salutation:
class: Drupal\hello_world\HelloWorldSalutation
arguments: ['@config.factory']

The addition is the argument's key, which is an array of service names proceeded by @. In this case, config.factory is the responsible service name, which, if we check in the core.services.yml file, we note that it maps to the Drupal\Core\Config\ConfigFactory class.

So, with this change, the HelloWorldSalutation class will be passed an instance of ConfigFactory. All we need to do now is adjust our class to actually receive it:

/**
* @var \Drupal\Core\Config\ConfigFactoryInterface
*/
protected $configFactory;

/**
* HelloWorldSalutation constructor.
*
* @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
*/
public function __construct(ConfigFactoryInterface $config_factory) {
$this->configFactory = $config_factory;
}

There's nothing too complicated going on here. We added a constructor and set the config factory service on a property. We can now use it to load our configuration object that we saved in the form. However, before we do that, we should also use the ConfigFactoryInterface class at the top of the file:

use Drupal\Core\Config\ConfigFactoryInterface;  

Now, at the top of the getSalutation() method, we can add the following bit:

$config = $this->configFactory->get('hello_world.custom_salutation');
$salutation = $config->get('salutation');
if ($salutation != "") {
return $salutation;
}

With this addition, we are loading the configuration object we saved in the form, and from it, we request the salutation key, where if you remember, we stored our message. If there is a value in there, we will return it. Otherwise, the code will continue, and our previous logic of time-based greeting will apply.

So, now if we reload our initial page, the message we saved through the form should show up. If we then return to the form and remove the message, this page should default back to the original dynamic greeting. Neat, right?

Let's now take a look at how we can create a custom block that we can place anywhere we like and which will output the same thing as our page.

主站蜘蛛池模板: 都匀市| 揭阳市| 宜兰县| 宁化县| 娄底市| 义乌市| 红河县| 沙田区| 黄大仙区| 冀州市| 鄂尔多斯市| 时尚| 平定县| 荃湾区| 武定县| 琼结县| 绥德县| 四川省| 中方县| 浑源县| 清徐县| 康马县| 仁怀市| 定陶县| 香港| 公安县| 德江县| 高青县| 迁安市| 阳春市| 西城区| 湖北省| 灵丘县| 永城市| 蓬溪县| 贺州市| 闻喜县| 福建省| 安仁县| 志丹县| 天镇县|