Cómo cargar un archivo de configuración

Configuramos los componentes individuales de Nette usando archivos de configuración. Mostraremos cómo cargar estos archivos.

Si está utilizando todo el framework, no necesita hacer nada más. En su proyecto, tiene un directorio config/ preparado para archivos de configuración, y la carga de la aplicación se encarga de cargarlos. Este artículo es para usuarios que utilizan solo una librería de Nette y desean aprovechar las capacidades de los archivos de configuración.

Los archivos de configuración generalmente se escriben en formato NEON y se editan mejor en editores con soporte para él. Pueden verse como instrucciones sobre cómo crear y configurar objetos. Por lo tanto, el resultado de cargar la configuración será una llamada fábrica, que es un objeto que creará otros objetos que queremos usar bajo demanda. Por ejemplo, una conexión a la base de datos, etc.

Esta fábrica también se llama contenedor de inyección de dependencias (contenedor DI) y si está interesado en los detalles, lea 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 primero instalaremos su paquete nette/bootstrap:

composer require nette/bootstrap

Y creamos 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, establezca los permisos de escritura para el directorio temp/.

Y llegamos a los propios archivos de configuración. Los cargamos usando addConfig():

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

Si queremos agregar más archivos de configuración, podemos llamar a la función addConfig() varias veces. Si aparecen elementos con las mismas claves en los archivos, se sobrescribirán (o se fusionarán en el caso de arrays). El archivo incluido más tarde tiene mayor prioridad que el anterior.

El último paso es crear el contenedor DI:

$container = $configurator->createContainer();

Y este ya creará los objetos requeridos para nosotros. Por ejemplo, si está utilizando la configuración para Nette Database, puede pedirle que cree conexiones a la base de datos:

$db = $container->getByType(Nette\Database\Connection::class);
// o
$explorer = $container->getByType(Nette\Database\Explorer::class);
// o al crear múltiples conexiones
$db = $container->getByName('database.main.connection');

¡Y ahora ya puede trabajar con la base de datos!

Modo de desarrollo vs producción

En el modo de desarrollo, el contenedor se actualiza automáticamente cada vez que cambian los archivos de configuración. En el modo de producción, se genera solo una vez y no se verifican los cambios. Por lo tanto, el modo de desarrollo se centra en la máxima comodidad del programador, mientras que el modo de producción se centra en el rendimiento y el despliegue en vivo.

La selección del modo se realiza mediante autodetección, por lo que generalmente no es necesario configurar nada ni cambiar manualmente. El modo es de desarrollo si la aplicación se ejecuta en localhost (es decir, dirección IP 127.0.0.1 o ::1) y no hay proxy presente (es decir, su cabecera HTTP). De lo contrario, se ejecuta en modo de producción.

Si queremos habilitar el modo de desarrollo también en otros casos, por ejemplo, para programadores que acceden desde una dirección IP específica, usamos setDebugMode():

$configurator->setDebugMode('23.75.345.200');
// también se puede especificar un array de direcciones IP

Recomendamos encarecidamente combinar la dirección IP con una cookie. Guardaremos un token secreto, por ejemplo, secret1234, en la cookie nette-debug, y de esta manera activaremos el modo de desarrollo para los programadores que acceden desde una dirección IP específica y que también tienen el token mencionado en la cookie:

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

También podemos desactivar completamente el modo de desarrollo, incluso para localhost:

$configurator->setDebugMode(false);

Parámetros

En los archivos de configuración, también puede usar parámetros, 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'],
]);

Se puede hacer referencia al parámetro projectId en la configuración usando la notación %projectId%.

versión: 3.x