Nette Documentation Preview

syntax
Passagem de configurações para os apresentadores
************************************************

.[perex]
Você precisa passar argumentos aos apresentadores que não são objetos (por exemplo, informações sobre se está funcionando em modo de depuração, caminhos de diretório, etc.) e, portanto, não pode ser passado automaticamente por cabeamento automático? A solução é encapsulá-los em um objeto `Settings`.

O serviço `Settings` é uma maneira muito fácil, porém útil de fornecer informações sobre uma aplicação em execução para os apresentadores. Sua forma específica depende inteiramente de suas necessidades particulares. Exemplo:

```php
namespace App;

class Settings
{
	public function __construct(
		// desde PHP 8.1 é possível especificar somente leitura
		public bool $debugMode,
		public string $appDir,
		// and so on
	) {}
}
```

Exemplo de registro para a configuração:

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

Quando o apresentador precisa das informações fornecidas por este serviço, ele simplesmente as pede ao construtor:

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

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

{{sitename: Melhores Práticas}}

Passagem de configurações para os apresentadores

Você precisa passar argumentos aos apresentadores que não são objetos (por exemplo, informações sobre se está funcionando em modo de depuração, caminhos de diretório, etc.) e, portanto, não pode ser passado automaticamente por cabeamento automático? A solução é encapsulá-los em um objeto Settings.

O serviço Settings é uma maneira muito fácil, porém útil de fornecer informações sobre uma aplicação em execução para os apresentadores. Sua forma específica depende inteiramente de suas necessidades particulares. Exemplo:

namespace App;

class Settings
{
	public function __construct(
		// desde PHP 8.1 é possível especificar somente leitura
		public bool $debugMode,
		public string $appDir,
		// and so on
	) {}
}

Exemplo de registro para a configuração:

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

Quando o apresentador precisa das informações fornecidas por este serviço, ele simplesmente as pede ao construtor:

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

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