Dalam Symfony 2 saat mendefinisikan layanan, dimungkinkan untuk menyuntikkan parameter konfigurasi dengan %parameter.name%
merujuknya dengan string. Sebagai contoh:
services:
app.mailer:
class: AppBundle\Mailer
arguments: ['%app.mailer.transport%']
Tapi apa pendekatan Drupal 8 yang benar untuk menyuntikkan nilai konfigurasi ke layanan? Tentu saja saya tidak ingin menggunakan \Drupal::config()
di dalam kelas layanan. Melewati nilai konfigurasi setiap kali layanan direferensikan tidak masuk akal juga.
Saya tahu bahwa saya dapat menyuntikkan layanan konfigurasi itu sendiri dan kemudian mendapatkan nilai konfigurasi dari itu, tetapi itu terlihat sedikit jelek karena layanan saya sendiri sudah tahu cara membaca data dari layanan konfigurasi. Sebagai contoh:
# Yaml service configuration
services:
app.mailer:
class: mail_module\Mailer
arguments: ['@config.factory']
PHP
<?php
class Mailer {
public function __construct($config) {
$this->mailTransport = $config->get('mail.config')->get('transport');
}
}
Apakah ada cara lain untuk melakukan hal ini?.
@config.factory
layanan untuk mendapatkan konfigurasi dari layanan konfigurasi. Ini karena layanan konfigurasi dapat diganti dan tidak perlu mendapatkan nilai konfigurasinya dari tempat yang sama.Jawaban:
Anda dapat menggunakan pabrik untuk
app.mailer
layanan Anda . Pabrik berhati-hati dalam mengambil konfigurasi untuk layanan. Layanan dapat tetap dipisahkan dari layanan konfigurasi dan tidak perlu tahu bagaimana parameter konfigurasi dinamai.sumber
Mailer
kelas ?Itulah cara melakukannya. Konfigurasi dapat berubah saat runtime, definisi layanan biasanya bertahan dan rebulding itu mahal. Dengan asumsi itu adalah konfigurasi yang Anda ingin pengguna ubah.
Jika tidak, maka Anda dapat menggunakan parameter, seperti contoh symfony. Kemudian Anda dapat meletakkan konfigurasi Anda di services.yml di situs / default. Tetapi Anda hanya dapat mengubahnya dengan mengubah kode dan membangun kembali wadah.
sumber
Anda dapat menggunakan pabrik atau layanan konfigurator yang mengetahui cara kerja pabrik konfigurasi dll, yang membuat layanan Anda dipisahkan dari pabrik konfigurasi. Klien HTTP pada intinya memiliki konfigurator jika Anda memerlukan contoh. Lihat https://symfony.com/doc/current/service_container/configurators.html#using-the-configurator untuk dokumen.
sumber