Transmiterea setărilor către prezentatori

Aveți nevoie să transmiteți prezentatorilor argumente care nu sunt obiecte (de exemplu, informații despre faptul că rulează în modul de depanare, căi de acces la directoare etc.) și care, prin urmare, nu pot fi transmise automat prin autowiring? Soluția este să le încapsulați într-un obiect Settings.

Serviciul Settings este o modalitate foarte simplă, dar utilă, de a furniza prezentatorilor informații despre o aplicație în curs de execuție. Forma sa specifică depinde în întregime de nevoile dumneavoastră particulare. Exemplu:

namespace App;

class Settings
{
	public function __construct(
		// de la PHP 8.1 este posibil să se specifice readonly
		public bool $debugMode,
		public string $appDir,
		// și așa mai departe
	) {}
}

Exemplu de înregistrare în configurație:

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

Atunci când prezentatorul are nevoie de informațiile furnizate de acest serviciu, el le solicită pur și simplu în constructor:

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

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