Einstellungen an Presenter übergeben

Müssen Sie Argumente an Presenter übergeben, die keine Objekte sind (z. B. Information, ob im Debug-Modus ausgeführt wird, Pfade zu Verzeichnissen usw.) und daher nicht automatisch über Autowiring übergeben werden können? Die Lösung besteht darin, sie in ein Settings-Objekt zu kapseln.

Der Settings-Dienst stellt eine sehr einfache und dennoch nützliche Methode dar, um Informationen über die laufende Anwendung an Presenter bereitzustellen. Seine konkrete Form hängt ganz von Ihren spezifischen Bedürfnissen ab. Beispiel:

namespace App;

class Settings
{
	public function __construct(
		// ab PHP 8.1 kann readonly angegeben werden
		public bool $debugMode,
		public string $appDir,
		// und so weiter
	) {}
}

Beispiel für die Registrierung in der Konfiguration:

services:
	- App\Settings(
		%debugMode%,
		%appDir%,
	)

Wenn der Presenter die von diesem Dienst bereitgestellten Informationen benötigt, fordert er sie einfach im Konstruktor an:

class MyPresenter extends Nette\Application\UI\Presenter
{
	public function __construct(
		private App\Settings $settings,
	) {}

	public function renderDefault()
	{
		if ($this->settings->debugMode) {
			// ...
		}
	}
}