Passando configurações para presenters

Você precisa passar argumentos para presenters que não são objetos (por exemplo, informação se está rodando em modo debug, caminhos para diretórios, etc.), e portanto não podem ser passados automaticamente via autowiring? A solução é encapsulá-los em um objeto Settings.

O serviço Settings representa uma maneira muito fácil e útil de fornecer informações sobre a aplicação em execução aos presenters. Sua forma específica depende puramente de suas necessidades particulares. Exemplo:

namespace App;

class Settings
{
	public function __construct(
		// a partir do PHP 8.1 é possível usar readonly
		public bool $debugMode,
		public string $appDir,
		// e assim por diante
	) {}
}

Exemplo de registro na configuração:

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

Quando um presenter precisar das informações fornecidas por este serviço, ele simplesmente as solicitará no construtor:

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

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