Передача настроек в презентеры

Нужно передать в презентеры не объектные аргументы (например, флаг режима отладки, пути к каталогам и подобное), которые нельзя передать автоматически через autowiring? Решение – упаковать их в отдельный объект Settings.

Сервис Settings даёт очень простой, но действенный способ снабдить презентеры сведениями о работающем приложении. Его конкретная структура полностью зависит от ваших нужд. Пример:

namespace App;

class Settings
{
	public function __construct(
		// начиная с PHP 8.1 можно использовать readonly
		public bool $debugMode,
		public string $appDir,
		// и так далее
	) {}
}

Пример регистрации в конфигурации:

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

Когда презентеру нужны сведения, предоставляемые этим сервисом, он просто запрашивает его в своём конструкторе:

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

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