Configuración de la aplicación
Resumen de las opciones de configuración de Nette Application.
Application
application:
# ¿mostrar el panel "Nette Application" en la BlueScreen de Tracy?
debugger: ... # (bool) activado si Tracy está disponible
# en producción, de las excepciones se ocupa siempre el error-presenter;
# esta opción solo activa ese comportamiento también en modo de desarrollo
catchExceptions: ... # (bool) el valor predeterminado es false, es decir, off en dev y siempre on en producción
# nombre del error-presenter
errorPresenter: Error # (string|array) el valor predeterminado es 'Nette:Error'
# define alias para los presenters y las acciones
aliases: ...
# define las reglas para traducir el nombre del presenter a una clase
mapping: ...
# ¿suprimir las advertencias de los enlaces no válidos?
# solo tiene efecto en modo de desarrollo
silentLinks: ... # (bool) el valor predeterminado es false
Desde la versión 3.2 de nette/application es posible definir un par de error-presenters:
application:
errorPresenter:
4xx: Error4xx # para Nette\Application\BadRequestException
5xx: Error5xx # para las demás excepciones
Separarlos resulta útil porque las dos situaciones son radicalmente distintas. Una BadRequestException (códigos
4xx) significa que la aplicación está bien y que el visitante simplemente ha pedido algo que no existe. Puede usar entonces un
presenter con todas sus funciones, que muestre un mensaje amable dentro del layout de su web. Un error 5xx, en cambio, significa
que algo se ha roto en la aplicación y no sabe qué. Mantenga el presenter 5xx lo más mínimo posible, para que nada más pueda
fallar mientras se renderiza; lo ideal es que no toque la base de datos, ni el layout, ni el usuario conectado.
La opción silentLinks determina cómo se comporta Nette en modo de desarrollo cuando falla la generación de un
enlace (por ejemplo, porque el presenter no existe, etc.). El valor predeterminado false significa que Nette lanza un
error E_USER_WARNING. Ponerla a true silencia ese mensaje de error. En un entorno de producción se
lanza siempre E_USER_WARNING. Este comportamiento también se puede influir con la variable del presenter $invalidLinkMode.
Los alias simplifican la referencia a los presenters de uso frecuente.
El mapping define las reglas por las que se deriva el nombre de la clase a partir del nombre del presenter.
Registro automático de presenters
Nette añade automáticamente los presenters como servicios al contenedor DI, lo que acelera notablemente su creación. La forma en que Nette localiza los presenters se puede configurar:
application:
# ¿buscar los presenters en el class map de Composer?
scanComposer: ... # (bool) el valor predeterminado es true
# máscara con la que deben encajar el nombre de la clase y el del archivo
scanFilter: ... # (string) el valor predeterminado es '*Presenter'
# ¿en qué directorios buscar los presenters?
scanDirs: # (string[]|false) el valor predeterminado es '%appDir%'
- %vendorDir%/mymodule
Los directorios indicados en scanDirs no sustituyen al valor predeterminado %appDir%, sino que lo
complementan, así que scanDirs contendrá ambas rutas: %appDir% y %vendorDir%/mymodule. Si
queremos omitir el directorio predeterminado, usamos un signo de exclamación:
application:
scanDirs!:
- %vendorDir%/mymodule
El escaneo de directorios se puede desactivar poniendo el valor a false. Los presenters dejan entonces de
registrarse como servicios, por lo que no se pueden ajustar mediante la sección decorator y su creación es más lenta. Por
eso no recomendamos suprimir del todo el registro automático: reduciría el rendimiento de la aplicación.
Plantillas Latte
Este ajuste afecta globalmente al comportamiento de Latte en los componentes y los presenters.
latte:
# ¿mostrar el panel de Latte en la Tracy Bar para la plantilla principal (true) o para todos los componentes (all)?
debugger: ... # (true|false|'all') activado si Tracy está disponible (solo en modo de depuración)
# genera las plantillas con la cabecera declare(strict_types=1)
strictTypes: ... # (bool) el valor predeterminado es false
# activa el [modo estricto del parser |latte:develop#strict mode]
strictParsing: ... # (bool) el valor predeterminado es false
# limita el alcance de las variables al cuerpo del bucle
scopedLoopVariables: ... # (bool) el valor predeterminado es false
# elimina la indentación causada por el anidamiento en etiquetas pareadas
dedent: ... # (bool) el valor predeterminado es false
# activa la [comprobación del código generado |latte:develop#Checking Generated Code]
phpLinter: ... # (string) el valor predeterminado es null
# establece el locale
locale: cs_CZ # (string) el valor predeterminado es null
# clase del objeto $this->template
templateClass: App\MyTemplateClass # el valor predeterminado es Nette\Bridges\ApplicationLatte\DefaultTemplate
Puede añadir nuevas extensiones así:
latte:
extensions:
- Latte\Essential\TranslatorExtension(@Nette\Localization\Translator)
Enrutamiento
Ajustes básicos:
routing:
# ¿mostrar el panel de enrutamiento en la Tracy Bar?
debugger: ... # (bool) activado si Tracy está disponible (solo en modo de depuración)
# serializa el router en el contenedor DI
cache: ... # (bool) el valor predeterminado es false
El enrutamiento se define normalmente en la clase RouterFactory. Como alternativa, las rutas también
se pueden definir en la configuración mediante parejas máscara: acción, pero este método no ofrece mucha
flexibilidad:
routing:
routes:
'detail/<id>': Admin:Home:default
'<presenter>/<action>': Front:Home:default
Constantes
Creación de constantes de PHP.
constants:
Foobar: 'baz'
La constante Foobar se creará al arrancar la aplicación.
Las constantes no deberían servir de variables globalmente accesibles. Para pasar valores a los objetos, use la inyección de dependencias.
PHP
Ajuste de las directivas de PHP. Encontrará un resumen de todas las directivas en php.net.
php:
date.timezone: Europe/Prague
Servicios DI
Estos servicios se añaden al contenedor DI:
| Nombre | Tipo | Descripción |
|---|---|---|
application.application |
Nette\Application\Application | el lanzador de la aplicación |
application.linkGenerator |
Nette\Application\LinkGenerator | LinkGenerator |
application.presenterFactory |
Nette\Application\IPresenterFactory | factory de presenters |
application.### |
Nette\Application\UI\Presenter | los distintos presenters |
routing.router |
Nette\Routing\Router | router |
latte.latteFactory |
Nette\Bridges\ApplicationLatte\LatteFactory | factory del objeto Latte\Engine |
latte.templateFactory |
Nette\Application\UI\TemplateFactory | factory de $this->template |