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
versión: 4.x