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%
.