Transmisión de ajustes a los presentadores

¿Necesita pasar argumentos a los presentadores que no son objetos (por ejemplo, información sobre si se está ejecutando en modo de depuración, rutas de directorios, etc.) y que, por tanto, no se pueden pasar automáticamente mediante autocableado? La solución es encapsularlos en un objeto Settings.

El servicio Settings es una forma muy sencilla y útil de proporcionar información sobre una aplicación en ejecución a los presentadores. Su forma concreta depende enteramente de sus necesidades particulares. Ejemplo:

namespace App;

class Settings
{
	public function __construct(
		// since PHP 8.1 it is possible to specify readonly
		public bool $debugMode,
		public string $appDir,
		// and so on
	) {}
}

Ejemplo de inscripción a la configuración:

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

Cuando el presentador necesita la información proporcionada por este servicio, simplemente la solicita en el constructor:

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

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