Предаване на настройки към презентерите

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