Nette Documentation Preview

syntax
Předání nastavení do presenterů
*******************************

.[perex]
Potřebujete do presenterů předávat argumenty, které nejsou objekty (např. informaci, zda běží v debug režimu, cesty k adresářům apod.), a tedy nemohou být předány automaticky pomocí autowiringu? Řešením je zapouzdřit je do objektu `Settings`.

Služba `Settings` přestavuje velmi snadný a přitom užitečný způsob, jak poskytovat informace o běžící aplikaci presenterům. Její konkrétní podoba záleží čistě na vašich konkrétních potřebách. Příklad:

```php
namespace App;

class Settings
{
	public function __construct(
		// od PHP 8.1 je možné uvést readonly
		public bool $debugMode,
		public string $appDir,
		// a tak dále
	) {}
}
```

Ukázka registrace do konfigurace:

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

Když bude presenter potřebovat informace poskytované touto službou, jednoduše si o ni řekne v konstruktoru:

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

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

{{sitename: Best Practices}}

Předání nastavení do presenterů

Potřebujete do presenterů předávat argumenty, které nejsou objekty (např. informaci, zda běží v debug režimu, cesty k adresářům apod.), a tedy nemohou být předány automaticky pomocí autowiringu? Řešením je zapouzdřit je do objektu Settings.

Služba Settings přestavuje velmi snadný a přitom užitečný způsob, jak poskytovat informace o běžící aplikaci presenterům. Její konkrétní podoba záleží čistě na vašich konkrétních potřebách. Příklad:

namespace App;

class Settings
{
	public function __construct(
		// od PHP 8.1 je možné uvést readonly
		public bool $debugMode,
		public string $appDir,
		// a tak dále
	) {}
}

Ukázka registrace do konfigurace:

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

Když bude presenter potřebovat informace poskytované touto službou, jednoduše si o ni řekne v konstruktoru:

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

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