Nette Bootstrap

Los distintos componentes de Nette se configuran con archivos de configuración. Le mostraremos cómo cargar esos archivos.

Si usa todo el framework, no hace falta hacer nada más. Su proyecto tiene un directorio config/ preparado para los archivos de configuración, y de cargarlos se encarga el cargador de la aplicación. Este artículo es para los usuarios que usan solo una biblioteca de Nette y quieren aprovechar los archivos de configuración.

Los archivos de configuración se escriben normalmente en formato NEON y se editan mejor en editores que lo soportan. Se pueden entender como instrucciones sobre cómo crear y configurar objetos. Así, el resultado de cargar una configuración será una llamada factory, que es un objeto que crea bajo demanda otros objetos que usted quiere usar. Por ejemplo, una conexión a la base de datos, etc.

Esa factory se llama también dependency injection container (contenedor DI) y, si le interesan los detalles, lea el capítulo sobre dependency injection.

De cargar la configuración y crear el contenedor se encarga la clase Nette\Bootstrap\Configurator, así que primero instalamos su paquete nette/bootstrap:

composer require nette/bootstrap

Y creamos una instancia de la clase Configurator. Como el contenedor DI generado se cacheará en disco, hay que 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 del directorio temp/.

Ahora llegamos a los archivos de configuración en sí. Los cargamos con addConfig():

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

Si quiere añadir más archivos de configuración, puede llamar a la función addConfig() varias veces. Si en los archivos aparecen elementos con las mismas claves, se sobrescribirán (o se fusionarán en el caso de los arrays). El archivo añadido después tiene mayor prioridad que el anterior.

El último paso es crear el contenedor DI:

$container = $configurator->createContainer();

Y eso nos creará los objetos deseados. Por ejemplo, si usa la configuración de Nette Database, puede pedirle que cree las conexiones a la base de datos:

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

¡Y ya puede trabajar con la base de datos!

Modo de desarrollo frente a modo de producción

En modo de desarrollo, el contenedor se actualiza automáticamente siempre que cambian los archivos de configuración. En modo de producción se genera una sola vez y no se comprueban los cambios. Así, el modo de desarrollo busca la máxima comodidad del programador, mientras que el modo de producción se centra en el rendimiento y en el despliegue en producción.

El modo se elige por autodetección, así que normalmente no hace falta configurar ni cambiar nada a mano. El modo es de desarrollo si la aplicación corre en localhost (es decir, la dirección IP 127.0.0.1 o ::1) y no hay ningún proxy (es decir, su cabecera HTTP). En los demás casos corre en modo de producción.

Si queremos activar el modo de desarrollo en otros casos, por ejemplo para los programadores que acceden desde una dirección IP concreta, use setDebugMode():

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

Recomendamos encarecidamente combinar la dirección IP con una cookie. Guarde un token secreto, p. ej. secret1234, en la cookie nette-debug. Así activa el modo de desarrollo para los programadores que acceden desde una dirección IP concreta y que además tienen ese token en la cookie:

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

También podemos desactivar por completo 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 fuera con el método addDynamicParameters():

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

Al parámetro remoteIp se puede hacer referencia en la configuración con la notación %remoteIp%.

Si está actualizando a una versión más reciente, vea la página de actualización.

versión: 3.x