Passer des réglages aux presenters

Vous avez besoin de passer aux presenters des arguments qui ne sont pas des objets (par exemple l'information indiquant si l'application tourne en mode débogage, des chemins de répertoires, etc.) et qui ne peuvent donc pas être passés automatiquement par autowiring ? La solution est de les encapsuler dans un objet Settings dédié.

Le service Settings offre un moyen très simple mais efficace de fournir aux presenters des informations sur l'application en cours d'exécution. Sa structure exacte dépend entièrement de vos besoins. Exemple :

namespace App;

class Settings
{
	public function __construct(
		// depuis PHP 8.1, readonly peut être utilisé
		public bool $debugMode,
		public string $appDir,
		// et ainsi de suite
	) {}
}

Exemple d'enregistrement dans la configuration :

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

Lorsqu'un presenter a besoin des informations fournies par ce service, il se contente de le demander dans son constructeur :

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

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