Nette Documentation Preview

syntax
Przekazywanie ustawień do presenterów
*************************************

.[perex]
Potrzebujesz przekazać do presenterów argumenty nieobiektowe (jak flaga wskazująca tryb debug, ścieżki do katalogów itd.), których nie da się przekazać automatycznie przez autowiring? Rozwiązaniem jest zamknięcie ich w dedykowanym obiekcie `Settings`.

Usługa `Settings` daje bardzo prosty, a zarazem skuteczny sposób dostarczania presenterom informacji o działającej aplikacji. Jej konkretna struktura zależy wyłącznie od Twoich potrzeb. Przykład:

```php
namespace App;

class Settings
{
	public function __construct(
		// od PHP 8.1 można używać readonly
		public bool $debugMode,
		public string $appDir,
		// i tak dalej
	) {}
}
```

Przykład rejestracji w konfiguracji:

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

Gdy presenter potrzebuje informacji dostarczanych przez tę usługę, po prostu prosi o nią w swoim konstruktorze:

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

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

Przekazywanie ustawień do presenterów

Potrzebujesz przekazać do presenterów argumenty nieobiektowe (jak flaga wskazująca tryb debug, ścieżki do katalogów itd.), których nie da się przekazać automatycznie przez autowiring? Rozwiązaniem jest zamknięcie ich w dedykowanym obiekcie Settings.

Usługa Settings daje bardzo prosty, a zarazem skuteczny sposób dostarczania presenterom informacji o działającej aplikacji. Jej konkretna struktura zależy wyłącznie od Twoich potrzeb. Przykład:

namespace App;

class Settings
{
	public function __construct(
		// od PHP 8.1 można używać readonly
		public bool $debugMode,
		public string $appDir,
		// i tak dalej
	) {}
}

Przykład rejestracji w konfiguracji:

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

Gdy presenter potrzebuje informacji dostarczanych przez tę usługę, po prostu prosi o nią w swoim konstruktorze:

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

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