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

Вам нужно передавать в презентеры аргументы, которые не являются объектами (например, информацию о том, работает ли приложение в режиме отладки, пути к каталогам и т.д.), и поэтому не могут быть переданы автоматически с помощью 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) {
			// ...
		}
	}
}