Nette Documentation Preview

syntax
Configuration des applications
******************************

.[perex]
Aperçu des options de configuration pour les applications Nette.


Application
===========

```neon
application:
	# afficher le panneau "Nette Application" dans Tracy BlueScreen ?
	debugger: ...           # (bool) par défaut true

	# l'error-presenter sera-t-il appelé en cas d'erreur ?
	# n'a d'effet qu'en mode développement
	catchExceptions: ...    # (bool) par défaut true

	# nom de l'error-presenter
	errorPresenter: Error   # (string|array) par défaut 'Nette:Error'

	# définit les alias pour les presenters et les actions
	aliases: ...

	# définit les règles pour traduire le nom du presenter en classe
	mapping: ...

	# les liens invalides ne génèrent pas d'avertissement ?
	# n'a d'effet qu'en mode développement
	silentLinks: ...        # (bool) par défaut false
```

Depuis la version 3.2 de `nette/application`, il est possible de définir une paire d'error-presenters :

```neon
application:
	errorPresenter:
		4xx: Error4xx   # pour l'exception Nette\Application\BadRequestException
		5xx: Error5xx   # pour les autres exceptions
```

Les séparer est utile, car les deux situations sont fondamentalement différentes. Une `BadRequestException` (codes 4xx) signifie que l'application va bien et que le visiteur a simplement demandé quelque chose qui n'existe pas. Vous pouvez donc y employer un presenter complet, qui affiche un message avenant dans le layout de votre site. À l'inverse, une erreur 5xx signifie que quelque chose s'est cassé dans l'application, sans qu'on sache quoi. Gardez le presenter 5xx aussi minimal que possible, pour que rien d'autre ne puisse échouer pendant son rendu : idéalement, il ne devrait toucher ni à la base de données, ni au layout, ni à l'utilisateur connecté.

L'option `silentLinks` détermine comment Nette se comporte en mode développement lorsque la génération d'un lien échoue (par exemple, parce que le presenter n'existe pas, etc.). La valeur par défaut `false` signifie que Nette lèvera une erreur `E_USER_WARNING`. La définir sur `true` supprimera ce message d'erreur. En environnement de production, `E_USER_WARNING` est toujours levé. Ce comportement peut également être influencé en définissant la variable du presenter [$invalidLinkMode |creating-links#Liens invalides].

Les [alias simplifient la création de liens |creating-links#Alias] vers les presenters fréquemment utilisés.

Le [mapping définit les règles |directory-structure#Mapping des presenters] selon lesquelles le nom de la classe est dérivé du nom du presenter.


Enregistrement automatique des presenters
-----------------------------------------

Nette ajoute automatiquement les presenters en tant que services au conteneur DI, ce qui accélère considérablement leur création. La manière dont Nette trouve les presenters peut être configurée :

```neon
application:
	# rechercher les presenters dans la class map de Composer ?
	scanComposer: ...      # (bool) par défaut true

	# masque auquel le nom de la classe et du fichier doit correspondre
	scanFilter: ...        # (string) par défaut '*Presenter'

	# dans quels répertoires rechercher les presenters ?
	scanDirs:              # (string[]|false) par défaut '%appDir%'
		- %vendorDir%/mymodule
```

Les répertoires spécifiés dans `scanDirs` ne remplacent pas la valeur par défaut `%appDir%`, mais la complètent, donc `scanDirs` contiendra les deux chemins `%appDir%` et `%vendorDir%/mymodule`. Si nous voulions omettre le répertoire par défaut, nous utiliserions un [point d'exclamation |dependency-injection:configuration#Fusion], qui écrase la valeur :

```neon
application:
	scanDirs!:
		- %vendorDir%/mymodule
```

L'analyse des répertoires peut être désactivée en spécifiant la valeur `false`. Les presenters ne sont alors plus enregistrés comme services : on ne peut donc plus les ajuster via la section [decorator |dependency-injection:configuration#Decorator] et leur création est plus lente. Nous ne recommandons pas de supprimer complètement l'enregistrement automatique, car cela réduirait les performances de l'application.


Templates Latte
===============

Ce paramètre permet d'influencer globalement le comportement de Latte dans les composants et les presenters.

```neon
latte:
	# afficher le panneau Latte dans la barre Tracy pour le template principal (true) ou pour tous les composants (all) ?
	debugger: ...        # (true|false|'all') activé si Tracy est disponible (mode développement uniquement)

	# génère les templates avec l'en-tête declare(strict_types=1)
	strictTypes: ...     # (bool) par défaut false

	# active le mode [parseur strict |latte:develop#strict mode]
	strictParsing: ...   # (bool) par défaut false

	# limite la portée des variables au corps de la boucle
	scopedLoopVariables: ... # (bool) par défaut false

	# supprime l'indentation due à l'imbrication dans les balises paires
	dedent: ...          # (bool) par défaut false

	# active le [contrôle du code généré |latte:develop#Checking Generated Code]
	phpLinter: ...       # (string) par défaut null

	# définit la locale
	locale: cs_CZ        # (string) par défaut null

	# classe de l'objet $this->template
	templateClass: App\MyTemplateClass # par défaut Nette\Bridges\ApplicationLatte\DefaultTemplate
```

Vous pouvez ajouter de nouvelles [extensions |latte:extending-latte#Latte Extension] avec :

```neon
latte:
	extensions:
		- Latte\Essential\TranslatorExtension(@Nette\Localization\Translator)
```


Routage
=======

Paramètres de base :

```neon
routing:
	# afficher le panneau de routage dans la barre Tracy ?
	debugger: ...   # (bool) par défaut true

	# sérialise le routeur dans le conteneur DI
	cache: ...      # (bool) par défaut false
```

Le routage est généralement défini dans la classe [RouterFactory |routing#Collection de routes]. Alternativement, les routes peuvent également être définies dans la configuration en utilisant des paires `masque: action`, mais cette méthode n'offre pas une aussi grande variété de paramètres :

```neon
routing:
	routes:
		'detail/<id>': Admin:Home:default
		'<presenter>/<action>': Front:Home:default
```


Constantes
==========

Création de constantes PHP.

```neon
constants:
	Foobar: 'baz'
```

Après le démarrage de l'application, la constante `Foobar` sera créée.

.[note]
Les constantes ne doivent pas servir de variables globales. Pour transmettre des valeurs aux objets, utilisez l'[injection de dépendances |dependency-injection:passing-dependencies].


PHP
===

Configuration des directives PHP. Un aperçu de toutes les directives se trouve sur [php.net |https://www.php.net/manual/en/ini.list.php].

```neon
php:
	date.timezone: Europe/Prague
```


Services DI
===========

Ces services sont ajoutés au conteneur DI :

| Nom                        | Type                                              | Description
|----------------------------|---------------------------------------------------|-----------------------------------------
| `application.application`	     | [api:Nette\Application\Application]               |  [lanceur de toute l'application |how-it-works#Nette Application]
| `application.linkGenerator`    | [api:Nette\Application\LinkGenerator]             |  [LinkGenerator |creating-links#LinkGenerator]
| `application.presenterFactory` | [api:Nette\Application\IPresenterFactory]         |  factory de presenters
| `application.###`              | [api:Nette\Application\UI\Presenter]              |  presenters individuels
| `routing.router`               | [api:Nette\Routing\Router]                        | routeur
| `latte.latteFactory`           | [api:Nette\Bridges\ApplicationLatte\LatteFactory] | factory de l'objet `Latte\Engine`
| `latte.templateFactory`        | [api:Nette\Application\UI\TemplateFactory]        | factory pour [`$this->template` |templates]

Configuration des applications

Aperçu des options de configuration pour les applications Nette.

Application

application:
	# afficher le panneau "Nette Application" dans Tracy BlueScreen ?
	debugger: ...           # (bool) par défaut true

	# l'error-presenter sera-t-il appelé en cas d'erreur ?
	# n'a d'effet qu'en mode développement
	catchExceptions: ...    # (bool) par défaut true

	# nom de l'error-presenter
	errorPresenter: Error   # (string|array) par défaut 'Nette:Error'

	# définit les alias pour les presenters et les actions
	aliases: ...

	# définit les règles pour traduire le nom du presenter en classe
	mapping: ...

	# les liens invalides ne génèrent pas d'avertissement ?
	# n'a d'effet qu'en mode développement
	silentLinks: ...        # (bool) par défaut false

Depuis la version 3.2 de nette/application, il est possible de définir une paire d'error-presenters :

application:
	errorPresenter:
		4xx: Error4xx   # pour l'exception Nette\Application\BadRequestException
		5xx: Error5xx   # pour les autres exceptions

Les séparer est utile, car les deux situations sont fondamentalement différentes. Une BadRequestException (codes 4xx) signifie que l'application va bien et que le visiteur a simplement demandé quelque chose qui n'existe pas. Vous pouvez donc y employer un presenter complet, qui affiche un message avenant dans le layout de votre site. À l'inverse, une erreur 5xx signifie que quelque chose s'est cassé dans l'application, sans qu'on sache quoi. Gardez le presenter 5xx aussi minimal que possible, pour que rien d'autre ne puisse échouer pendant son rendu : idéalement, il ne devrait toucher ni à la base de données, ni au layout, ni à l'utilisateur connecté.

L'option silentLinks détermine comment Nette se comporte en mode développement lorsque la génération d'un lien échoue (par exemple, parce que le presenter n'existe pas, etc.). La valeur par défaut false signifie que Nette lèvera une erreur E_USER_WARNING. La définir sur true supprimera ce message d'erreur. En environnement de production, E_USER_WARNING est toujours levé. Ce comportement peut également être influencé en définissant la variable du presenter $invalidLinkMode.

Les alias simplifient la création de liens vers les presenters fréquemment utilisés.

Le mapping définit les règles selon lesquelles le nom de la classe est dérivé du nom du presenter.

Enregistrement automatique des presenters

Nette ajoute automatiquement les presenters en tant que services au conteneur DI, ce qui accélère considérablement leur création. La manière dont Nette trouve les presenters peut être configurée :

application:
	# rechercher les presenters dans la class map de Composer ?
	scanComposer: ...      # (bool) par défaut true

	# masque auquel le nom de la classe et du fichier doit correspondre
	scanFilter: ...        # (string) par défaut '*Presenter'

	# dans quels répertoires rechercher les presenters ?
	scanDirs:              # (string[]|false) par défaut '%appDir%'
		- %vendorDir%/mymodule

Les répertoires spécifiés dans scanDirs ne remplacent pas la valeur par défaut %appDir%, mais la complètent, donc scanDirs contiendra les deux chemins %appDir% et %vendorDir%/mymodule. Si nous voulions omettre le répertoire par défaut, nous utiliserions un point d'exclamation, qui écrase la valeur :

application:
	scanDirs!:
		- %vendorDir%/mymodule

L'analyse des répertoires peut être désactivée en spécifiant la valeur false. Les presenters ne sont alors plus enregistrés comme services : on ne peut donc plus les ajuster via la section decorator et leur création est plus lente. Nous ne recommandons pas de supprimer complètement l'enregistrement automatique, car cela réduirait les performances de l'application.

Templates Latte

Ce paramètre permet d'influencer globalement le comportement de Latte dans les composants et les presenters.

latte:
	# afficher le panneau Latte dans la barre Tracy pour le template principal (true) ou pour tous les composants (all) ?
	debugger: ...        # (true|false|'all') activé si Tracy est disponible (mode développement uniquement)

	# génère les templates avec l'en-tête declare(strict_types=1)
	strictTypes: ...     # (bool) par défaut false

	# active le mode [parseur strict |latte:develop#strict mode]
	strictParsing: ...   # (bool) par défaut false

	# limite la portée des variables au corps de la boucle
	scopedLoopVariables: ... # (bool) par défaut false

	# supprime l'indentation due à l'imbrication dans les balises paires
	dedent: ...          # (bool) par défaut false

	# active le [contrôle du code généré |latte:develop#Checking Generated Code]
	phpLinter: ...       # (string) par défaut null

	# définit la locale
	locale: cs_CZ        # (string) par défaut null

	# classe de l'objet $this->template
	templateClass: App\MyTemplateClass # par défaut Nette\Bridges\ApplicationLatte\DefaultTemplate

Vous pouvez ajouter de nouvelles extensions avec :

latte:
	extensions:
		- Latte\Essential\TranslatorExtension(@Nette\Localization\Translator)

Routage

Paramètres de base :

routing:
	# afficher le panneau de routage dans la barre Tracy ?
	debugger: ...   # (bool) par défaut true

	# sérialise le routeur dans le conteneur DI
	cache: ...      # (bool) par défaut false

Le routage est généralement défini dans la classe RouterFactory. Alternativement, les routes peuvent également être définies dans la configuration en utilisant des paires masque: action, mais cette méthode n'offre pas une aussi grande variété de paramètres :

routing:
	routes:
		'detail/<id>': Admin:Home:default
		'<presenter>/<action>': Front:Home:default

Constantes

Création de constantes PHP.

constants:
	Foobar: 'baz'

Après le démarrage de l'application, la constante Foobar sera créée.

Les constantes ne doivent pas servir de variables globales. Pour transmettre des valeurs aux objets, utilisez l'injection de dépendances.

PHP

Configuration des directives PHP. Un aperçu de toutes les directives se trouve sur php.net.

php:
	date.timezone: Europe/Prague

Services DI

Ces services sont ajoutés au conteneur DI :

Nom Type Description
application.application Nette\Application\Application lanceur de toute l'application
application.linkGenerator Nette\Application\LinkGenerator LinkGenerator
application.presenterFactory Nette\Application\IPresenterFactory factory de presenters
application.### Nette\Application\UI\Presenter presenters individuels
routing.router Nette\Routing\Router routeur
latte.latteFactory Nette\Bridges\ApplicationLatte\LatteFactory factory de l'objet Latte\Engine
latte.templateFactory Nette\Application\UI\TemplateFactory factory pour $this->template