Passare impostazioni ai presenter

Dovete passare ai presenter argomenti non oggetto (come un flag che indica la modalità debug, dei percorsi di directory ecc.) che non si possono passare automaticamente tramite autowiring? La soluzione è racchiuderli in un apposito oggetto Settings.

Il servizio Settings offre un modo molto semplice ma efficace di fornire ai presenter informazioni sull'applicazione in esecuzione. La sua struttura concreta dipende interamente dalle vostre esigenze. Esempio:

namespace App;

class Settings
{
	public function __construct(
		// da PHP 8.1 si può usare readonly
		public bool $debugMode,
		public string $appDir,
		// e così via
	) {}
}

Esempio di registrazione nella configurazione:

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

Quando un presenter ha bisogno delle informazioni fornite da questo servizio, si limita a chiederlo nel proprio costruttore:

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

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