Nette Documentation Preview

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

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

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

```php
namespace App;

class Settings
{
	public function __construct(
		// since PHP 8.1 it is possible to specify readonly
		public bool $debugMode,
		public string $appDir,
		// and so on
	) {}
}
```

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

```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(
		// since PHP 8.1 it is possible to specify readonly
		public bool $debugMode,
		public string $appDir,
		// and so on
	) {}
}

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

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) {
			// ...
		}
	}
}