En Symfony 2, al definir un servicio, es posible inyectar parámetros de configuración haciendo referencia a ellos con %parameter.name%
cadenas. Por ejemplo:
services:
app.mailer:
class: AppBundle\Mailer
arguments: ['%app.mailer.transport%']
Pero, ¿cuál es el enfoque correcto de Drupal 8 para inyectar valores de configuración en los servicios? Por supuesto que no quiero usar \Drupal::config()
dentro de una clase de servicio. Pasar valores de configuración cada vez que se hace referencia a un servicio tampoco tiene mucho sentido.
Sé que puedo inyectar el servicio de configuración en sí y luego obtener los valores de configuración, pero eso parece un poco malo ya que mi servicio en sí mismo sabe cómo leer datos del servicio de configuración. Por ejemplo:
# 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');
}
}
Hay alguna otra manera de hacer esto?
@config.factory
servicio para obtener la configuración del servicio de configuración. Esto se debe a que el servicio de configuración podría anularse y no necesariamente obtener sus valores de configuración desde el mismo lugar.Respuestas:
Puede usar una fábrica para su
app.mailer
servicio. La fábrica se encarga de recuperar la configuración del servicio. El servicio puede permanecer desacoplado del servicio de configuración y no necesita saber cómo se nombran los parámetros de configuración.fuente
Mailer
clase? ?Esa es la manera de hacerlo. La configuración puede cambiar en tiempo de ejecución, la definición del servicio generalmente es persistente y la modificación es costosa. Asumiendo que es una configuración que desea que los usuarios cambien.
Si no es así, puede usar parámetros, como en el ejemplo de Symfony. Luego puede poner su configuración en services.yml en sites / default. Pero solo puede cambiarlo cambiando el código y reconstruyendo el contenedor.
fuente
Puede usar un servicio de fábrica o configurador que sepa cómo funciona la fábrica de configuraciones, etc., que mantiene su servicio desacoplado de la fábrica de configuraciones. El cliente HTTP en el núcleo tiene un configurador si necesita un ejemplo. Consulte https://symfony.com/doc/current/service_container/configurators.html#using-the-configurator para ver los documentos.
fuente