Pasar ajustes a los presenters

¿Necesita pasar a los presenters argumentos que no son objetos (como una bandera que indica el modo de depuración, rutas de directorios, etc.) y que no se pueden pasar automáticamente por autowiring? La solución es encapsularlos en un objeto Settings dedicado.

El servicio Settings ofrece una forma muy sencilla pero eficaz de suministrar a los presenters información sobre la aplicación en marcha. Su estructura concreta depende por completo de sus necesidades. Ejemplo:

namespace App;

class Settings
{
	public function __construct(
		// desde PHP 8.1 se puede usar readonly
		public bool $debugMode,
		public string $appDir,
		// y así sucesivamente
	) {}
}

Ejemplo de su registro en la configuración:

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

Cuando un presenter necesita la información que ofrece este servicio, simplemente se la pide en su constructor:

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

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