Nette Documentation Preview

syntax
Pasar la configuración a los Presenters
***************************************

.[perex]
¿Necesitas pasar argumentos a los Presenters que no son objetos (p. ej., información sobre si se ejecuta en modo de depuración, rutas a directorios, etc.) y, por lo tanto, no se pueden pasar automáticamente mediante autowiring? La solución es encapsularlos en un objeto `Settings`.

El servicio `Settings` representa una forma muy fácil y útil de proporcionar información sobre la aplicación en ejecución a los Presenters. Su forma específica depende puramente de tus necesidades concretas. Ejemplo:

```php
namespace App;

class Settings
{
	public function __construct(
		// desde PHP 8.1 es posible indicar readonly
		public readonly bool $debugMode,
		public readonly string $appDir,
		// y así sucesivamente
	) {}
}
```

Ejemplo de registro en la configuración:

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

Cuando un Presenter necesite la información proporcionada por este servicio, simplemente la solicitará en el constructor:

```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}}

Pasar la configuración a los Presenters

¿Necesitas pasar argumentos a los Presenters que no son objetos (p. ej., información sobre si se ejecuta en modo de depuración, rutas a directorios, etc.) y, por lo tanto, no se pueden pasar automáticamente mediante autowiring? La solución es encapsularlos en un objeto Settings.

El servicio Settings representa una forma muy fácil y útil de proporcionar información sobre la aplicación en ejecución a los Presenters. Su forma específica depende puramente de tus necesidades concretas. Ejemplo:

namespace App;

class Settings
{
	public function __construct(
		// desde PHP 8.1 es posible indicar readonly
		public readonly bool $debugMode,
		public readonly string $appDir,
		// y así sucesivamente
	) {}
}

Ejemplo de registro en la configuración:

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

Cuando un Presenter necesite la información proporcionada por este servicio, simplemente la solicitará en el constructor:

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

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