Nette Documentation Preview

syntax
Cómo cargar el archivo de configuración
***************************************

.[perex]
Los componentes individuales de Nette se configuran utilizando archivos de configuración. Le mostraremos cómo cargar estos archivos.

.[tip]
Si estás utilizando todo el framework, no hay necesidad de hacer nada más. En el proyecto, tienes un directorio pre-preparado `config/` para los ficheros de configuración, y el [cargador de la |application:bootstrap#DI Container Configuration] aplicación se encarga de cargarlos.
Este artículo es para usuarios que utilizan sólo una librería Nette y quieren aprovechar los ficheros de configuración.

Los archivos de configuración suelen estar escritos en [NEON |neon:format] y es mejor editarlos en [editores que lo soporten |best-practices:editors-and-tools#ide-editor]. Pueden ser considerados como instrucciones sobre como **crear y configurar** objetos. Así, el resultado de cargar una configuración será lo que se denomina una fábrica, que es un objeto que creará bajo demanda otros objetos que quieras utilizar. Por ejemplo, una conexión a una base de datos, etc.

Esta fábrica también se llama *contenedor de inyección de dependencias* (DI container) y si estás interesado en los detalles, lee el capítulo sobre [inyección de dependencias |dependency-injection:].

La carga de la configuración y la creación del contenedor son manejadas por la clase [api:Nette\Bootstrap\Configurator], así que instalaremos primero su paquete `nette/bootstrap`:

```shell
composer require nette/bootstrap
```

Y crearemos una instancia de la clase `Configurator`. Dado que el contenedor DI generado se almacenará en caché en el disco, es necesario establecer la ruta al directorio donde se guardará:

```php
$configurator = new Nette\Bootstrap\Configurator;
$configurator->setTempDirectory(__DIR__ . '/temp');
```

En Linux o macOS, establece los [permisos de escritura |nette:troubleshooting#Setting directory permissions] para el directorio `temp/`.

Y llegamos a los archivos de configuración propiamente dichos. Estos se cargan utilizando `addConfig()`:

```php
$configurator->addConfig(__DIR__ . '/database.neon');
```

Si desea añadir más ficheros de configuración, puede llamar a la función `addConfig()` varias veces. Si en los ficheros aparecen elementos con las mismas claves, se sobrescribirán (o [fusionarán |dependency-injection:configuration#Merging] en el caso de las matrices). Un fichero insertado posteriormente tiene mayor prioridad que el anterior.

El último paso consiste en crear un contenedor DI:

```php
$container = $configurator->createContainer();
```

Y ya nos creará los objetos deseados. Por ejemplo, si estás utilizando la configuración para [Nette Database |database:configuration], puedes pedirle que cree conexiones a bases de datos:

```php
$db = $container->getByType(Nette\Database\Connection::class);
// or
$explorer = $container->getByType(Nette\Database\Explorer::class);
// or when creating multiple connections
$db = $container->getByName('database.main.connection');
```

¡Y ya puedes trabajar con la base de datos!


Modo de desarrollo frente a modo de producción .[#toc-development-vs-production-mode]
-------------------------------------------------------------------------------------

En el modo de desarrollo, el contenedor se actualiza automáticamente cada vez que se modifican los archivos de configuración. En el modo de producción, sólo se genera una vez y los cambios no se comprueban.
Así, el modo de desarrollo está orientado a la máxima comodidad del programador, mientras que el modo de producción está orientado al rendimiento.

La selección del modo se hace por autodetección, por lo que normalmente no hay necesidad de configurar o cambiar manualmente nada. El modo es desarrollo cuando la aplicación se ejecuta en un host local (es decir, la dirección IP `127.0.0.1` o `::1`) y no hay ningún proxy (es decir, su cabecera HTTP) presente. En caso contrario, se ejecuta en modo de producción.

Si desea activar el modo de desarrollo en otros casos, como cuando los programadores acceden desde una dirección IP específica, utilice `setDebugMode()`:

```php
$configurator->setDebugMode('23.75.345.200');
// an array of IP addresses can also be specified
```

Recomendamos encarecidamente combinar la dirección IP con una cookie. Almacene un token secreto, por ejemplo `secret1234`, en la cookie `nette-debug`, y de esta forma habilitará el modo de desarrollo para los programadores que accedan desde una dirección IP específica y también tendrá el token mencionado en la cookie:

```php
$configurator->setDebugMode('secret1234@23.75.345.200');
```

También puedes desactivar el modo de desarrollo por completo, incluso para localhost:

```php
$configurator->setDebugMode(false);
```


Parámetros .[#toc-parameters]
-----------------------------

También puede utilizar parámetros en los archivos de configuración, que se definen [en la sección `parameters`  |dependency-injection:configuration#parameters`].

También se pueden insertar desde el exterior utilizando el método `addDynamicParameters()`:

```php
$configurator->addDynamicParameters([
	'remoteIp' => $_SERVER['REMOTE_ADDR'],
]);
```

El parámetro `projectId` puede referenciarse en la configuración con la notación `%projectId%`.


{{leftbar: nette:@menu-topics}}

Cómo cargar el archivo de configuración

Los componentes individuales de Nette se configuran utilizando archivos de configuración. Le mostraremos cómo cargar estos archivos.

Si estás utilizando todo el framework, no hay necesidad de hacer nada más. En el proyecto, tienes un directorio pre-preparado config/ para los ficheros de configuración, y el cargador de la aplicación se encarga de cargarlos. Este artículo es para usuarios que utilizan sólo una librería Nette y quieren aprovechar los ficheros de configuración.

Los archivos de configuración suelen estar escritos en NEON y es mejor editarlos en editores que lo soporten. Pueden ser considerados como instrucciones sobre como crear y configurar objetos. Así, el resultado de cargar una configuración será lo que se denomina una fábrica, que es un objeto que creará bajo demanda otros objetos que quieras utilizar. Por ejemplo, una conexión a una base de datos, etc.

Esta fábrica también se llama contenedor de inyección de dependencias (DI container) y si estás interesado en los detalles, lee el capítulo sobre inyección de dependencias.

La carga de la configuración y la creación del contenedor son manejadas por la clase Nette\Bootstrap\Configurator, así que instalaremos primero su paquete nette/bootstrap:

composer require nette/bootstrap

Y crearemos una instancia de la clase Configurator. Dado que el contenedor DI generado se almacenará en caché en el disco, es necesario establecer la ruta al directorio donde se guardará:

$configurator = new Nette\Bootstrap\Configurator;
$configurator->setTempDirectory(__DIR__ . '/temp');

En Linux o macOS, establece los permisos de escritura para el directorio temp/.

Y llegamos a los archivos de configuración propiamente dichos. Estos se cargan utilizando addConfig():

$configurator->addConfig(__DIR__ . '/database.neon');

Si desea añadir más ficheros de configuración, puede llamar a la función addConfig() varias veces. Si en los ficheros aparecen elementos con las mismas claves, se sobrescribirán (o fusionarán en el caso de las matrices). Un fichero insertado posteriormente tiene mayor prioridad que el anterior.

El último paso consiste en crear un contenedor DI:

$container = $configurator->createContainer();

Y ya nos creará los objetos deseados. Por ejemplo, si estás utilizando la configuración para Nette Database, puedes pedirle que cree conexiones a bases de datos:

$db = $container->getByType(Nette\Database\Connection::class);
// or
$explorer = $container->getByType(Nette\Database\Explorer::class);
// or when creating multiple connections
$db = $container->getByName('database.main.connection');

¡Y ya puedes trabajar con la base de datos!

Modo de desarrollo frente a modo de producción

En el modo de desarrollo, el contenedor se actualiza automáticamente cada vez que se modifican los archivos de configuración. En el modo de producción, sólo se genera una vez y los cambios no se comprueban. Así, el modo de desarrollo está orientado a la máxima comodidad del programador, mientras que el modo de producción está orientado al rendimiento.

La selección del modo se hace por autodetección, por lo que normalmente no hay necesidad de configurar o cambiar manualmente nada. El modo es desarrollo cuando la aplicación se ejecuta en un host local (es decir, la dirección IP 127.0.0.1 o ::1) y no hay ningún proxy (es decir, su cabecera HTTP) presente. En caso contrario, se ejecuta en modo de producción.

Si desea activar el modo de desarrollo en otros casos, como cuando los programadores acceden desde una dirección IP específica, utilice setDebugMode():

$configurator->setDebugMode('23.75.345.200');
// an array of IP addresses can also be specified

Recomendamos encarecidamente combinar la dirección IP con una cookie. Almacene un token secreto, por ejemplo secret1234, en la cookie nette-debug, y de esta forma habilitará el modo de desarrollo para los programadores que accedan desde una dirección IP específica y también tendrá el token mencionado en la cookie:

$configurator->setDebugMode('secret1234@23.75.345.200');

También puedes desactivar el modo de desarrollo por completo, incluso para localhost:

$configurator->setDebugMode(false);

Parámetros

También puede utilizar parámetros en los archivos de configuración, que se definen en la sección parameters.

También se pueden insertar desde el exterior utilizando el método addDynamicParameters():

$configurator->addDynamicParameters([
	'remoteIp' => $_SERVER['REMOTE_ADDR'],
]);

El parámetro projectId puede referenciarse en la configuración con la notación %projectId%.