Wie greife ich von einem Dienst aus auf Anwendungsparameter zu?

In PHP können Sie auf Anwendungsparameter von einem Service aus zugreifen, indem Sie das ParameterBag-Objekt in den Konstruktor der Service-Klasse einfügen. Das ParameterBag-Objekt enthält alle im Anwendungskonfigurationsdatei definierten Parameter. Sobald Sie das ParameterBag-Objekt haben, können Sie seine Methode get() verwenden, um den Wert eines bestimmten Parameters abzurufen.

Zum Beispiel könnten Sie in einer Service-Klasse namens MyService das ParameterBag-Objekt einfügen und es verwenden, um auf einen Parameter namens parameter_name zuzugreifen wie folgt:

use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;

class MyService {
    private $params;

    public function __construct(ParameterBagInterface $params) {
        $this->params = $params;
    }

    public function doSomething() {
        $parameterValue = $this->params->get('parameter_name');
        // use $parameterValue in your service logic
    }
}

Du kannst auch die get-Methode verwenden, um alle Parameter abzurufen, so:

$parameters = $this->params->all();

Beachten Sie, dass das ParameterBag-Objekt in den Konstruktor der Service-Klasse eingefügt werden muss, damit dies funktioniert.

In PHP können Sie auch auf Anwendungsparameter von einem Dienst zugreifen, indem Sie das Containerobjekt verwenden, das eine Instanz eines Dependency-Injection-Containers ist. Das Containerobjekt wird normalerweise als Argument an den Konstruktor des Dienstes übergeben.

Hier ist ein Beispiel für den Zugriff auf einen Anwendungsparameter von einem Dienst in PHP:

<?php
class Service
{
  /**
   * @var string
   */
  private $parameter;

  /**
   * Service constructor.
   *
   * @param string $parameter
   */
  public function __construct($parameter)
  {
    $this->parameter = $parameter;
  }

  /**
   * Outputs the value of the parameter.
   */
  public function outputParameter()
  {
    echo $this->parameter;
  }
}

class Container
{
  /**
   * @var Service
   */
  private $service;

  /**
   * Container constructor.
   */
  public function __construct()
  {
    $this->service = new Service('Hello, World!');
  }

  /**
   * Returns the service.
   *
   * @return Service
   */
  public function getService()
  {
    return $this->service;
  }
}

$container = new Container();
$service = $container->getService();
$service->outputParameter();
?>

Ausgabe:

Hello, World!

In diesem Beispiel hat die Klasse Service eine private Eigenschaft $parameter und einen Konstruktor, der den Wert des Parameters akzeptiert. Die Klasse Container erstellt eine Instanz der Klasse Service und übergibt den gewünschten Wert des Parameters an ihren Konstruktor. Die Klasse Container bietet auch eine Methode getService, um die Instanz der Klasse Service abzurufen. Schließlich erstellt das Skript eine Instanz der Klasse Container, holt die Instanz der Klasse Service ab und ruft ihre Methode outputParameter auf, um den Wert des Parameters auszugeben.