Przekazywanie ustawień do presenterów

Potrzebujesz przekazywać do presenterów argumenty, które nie są obiektami (np. informację, czy działa w trybie debugowania, ścieżki do katalogów itp.), a więc nie mogą być przekazane automatycznie za pomocą autowiringu? Rozwiązaniem jest zamknięcie ich w obiekcie Settings.

Usługa Settings stanowi bardzo łatwy, a zarazem użyteczny sposób dostarczania informacji o działającej aplikacji presenterom. Jej konkretna postać zależy wyłącznie od Twoich konkretnych potrzeb. Przykład:

namespace App;

class Settings
{
	public function __construct(
		// od PHP 8.1 można użyć readonly
		public bool $debugMode,
		public string $appDir,
		// i tak dalej
	) {}
}

Przykład rejestracji w konfiguracji:

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

Gdy presenter będzie potrzebował informacji dostarczanych przez tę usługę, po prostu poprosi o nią w konstruktorze:

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

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