Nette Documentation Preview

syntax
Передача параметрів презентаторам
*********************************

.[perex]
Вам потрібно передавати презентерам аргументи, які не є об'єктами (наприклад, інформацію про те, чи працює він у режимі налагодження, шляхи до каталогів тощо) і тому не можуть бути передані автоматично за допомогою автопідключення? Рішення - інкапсулювати їх в об'єкт `Settings`.

Служба `Settings` - це дуже простий і корисний спосіб надання інформації про запущений додаток доповідачам. Його конкретна форма повністю залежить від ваших конкретних потреб. Приклад:

```php
namespace App;

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

Приклад реєстрації в конфігурації:

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

Коли ведучому потрібна інформація, яку надає ця служба, він просто запитує її в конструкторі:

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

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

{{sitename: Найкращі практики}}

Передача параметрів презентаторам

Вам потрібно передавати презентерам аргументи, які не є об'єктами (наприклад, інформацію про те, чи працює він у режимі налагодження, шляхи до каталогів тощо) і тому не можуть бути передані автоматично за допомогою автопідключення? Рішення – інкапсулювати їх в об'єкт 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) {
			// ...
		}
	}
}