Przekazywanie ustawień do prezenterów

Czy potrzebujesz przekazać argumenty do prezenterów, które nie są obiektami (np. Informacje o tym, czy działają w trybie debugowania, ścieżki do katalogów itp.) I dlatego nie mogą być przekazywane automatycznie przez autowiring? Rozwiązaniem jest enkapsulacja ich w obiekcie Settings.

Serwis Settings to bardzo prosty, a zarazem przydatny sposób na przekazanie informacji o działającej aplikacji prezenterom. Jego konkretna forma zależy wyłącznie od Twoich konkretnych potrzeb. Przykład:

namespace App;

class Settings
{
	public function __construct(
		// od PHP 8.1 je možné uvést readonly
		public bool $debugMode,
		public string $appDir,
		// a tak dále
	) {}
}

Przykładowa rejestracja konfiguracji:

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

Kiedy prezenter potrzebuje informacji dostarczanych przez tę usługę, po prostu prosi o nie w konstruktorze:

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

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