Configuration de Symfony (et de l'environnement)
Le programme Symfony est composé d'un ensemble de bundles "chargés de présenter toutes les fonctions et possibilités". Chaque bundle peut être personnalisé via des fichiers de configuration au format YAML, XML ou PHP. Le fichier de configuration principal par défaut se trouve dans le répertoire app/config/
, qui peut être config.yml
, config.xml
ou config .php
, selon votre préférence : app/config/
目录下,它可以是config.yml
、config.xml
或config.php
,根据你的偏好而定:
YAML:# app/config/config.ymlimports: - { resource: parameters.yml } - { resource: security.yml }framework: secret: "%secret%" router: { resource: "%kernel.root_dir%/config/routing.yml" } # ... # Twig Configurationtwig: debug: "%kernel.debug%" strict_variables: "%kernel.debug%" # ...
XML:<!-- app/config/config.xml --><?xml version="1.0" encoding="UTF-8" ?><container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:framework="http://symfony.com/schema/dic/symfony" xmlns:twig="http://symfony.com/schema/dic/twig" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd http://symfony.com/schema/dic/twig http://symfony.com/schema/dic/twig/twig-1.0.xsd"> <imports> <import resource="parameters.yml" /> <import resource="security.yml" /> </imports> <framework:config secret="%secret%"> <framework:router resource="%kernel.root_dir%/config/routing.xml" /> <!-- ... --> </framework:config> <!-- Twig Configuration --> <twig:config debug="%kernel.debug%" strict-variables="%kernel.debug%" /> <!-- ... --></container>
PHP:// app/config/config.php$this->import('parameters.yml');$this->import('security.yml'); $container->loadFromExtension('framework', array( 'secret' => '%secret%', 'router' => array( 'resource' => '%kernel.root_dir%/config/routing.php', ), // ...)); // Twig Configuration$container->loadFromExtension('twig', array( 'debug' => '%kernel.debug%', 'strict_variables' => '%kernel.debug%',)); // ...
在下面的环境小节中,你将会明确每种格式的文件是如何被加载的。
每一个根节点,比如framework
或twig
,定义了相应bundle的配置信息。例如,framework
键所定义的,是用于Symfony核心的FrameworkBundle之配置信息,包括路由配置、模板配置以及其他内核配置。
现在,毋须担心每个根节点下的特定配置选项。配置文件预装了一些有意义的默认配置。当你详细研读和探索Symfony每一个部分时,你将会掌握每一个功能的特定配置选项之意义。
默认配置信息的剥离 ¶
你可以剥离出指定bundle的YAML格式的默认配置信息,通过命令行的config:dump-reference
$ php bin/console config:dump-reference FrameworkBundle
$ php bin/console config:dump-reference framework
localhost/app_dev.php/random/10Dans la section environnement ci-dessous, vous préciserez comment les fichiers de chaque format sont chargés.
Chaque nœud racine, tel que
framework
ou twig
, définit les informations de configuration du bundle correspondant. Par exemple, la clé framework
définit les informations de configuration du FrameworkBundle utilisé dans le noyau Symfony, y compris la configuration du routage, la configuration du modèle et d'autres configurations du noyau. - 🎜YAML : simple, clair et très lisible. (Apprenez-en plus grâce aux composants YAML) 🎜
- 🎜XML : parfois plus puissant que YAML et prend en charge la saisie semi-automatique du code IDE. 🎜
- 🎜PHP : Très puissant, mais moins lisible que les formats de configuration standards. 🎜
Suppression des informations de configuration par défaut ¶
🎜Vous pouvez supprimer les informations de configuration par défaut au format YAML du bundle spécifié via la ligne de commandeconfig:dump- commande de référence
. Voici un exemple de suppression des informations de configuration par défaut d'un FrameworkBundle : 🎜localhost/app_dev.php/random/10🎜Le pseudonyme privé étendu (le nœud racine dans le fichier de configuration) peut également être utilisé : 🎜
$ php bin/console cache:clear --env=prod --no-debug🎜🎜🎜Veuillez vous référer à l'article du livre de recettes Comment charger les informations de configuration d'un service dans un bundle, pour obtenir le contenu associé sur « Ajouter des informations de configuration à votre propre bundle ». 🎜🎜🎜
Environnement ¶
Un ensemble de programmes peut s'exécuter dans plusieurs environnements. Différents environnements partagent le même code PHP (à l'exception du contrôleur frontal), mais utilisent des fichiers de configuration différents. Par exemple, dans l'environnement dev
, les journaux de niveau d'avertissement et d'erreur seront enregistrés, mais dans l'environnement prod
, seuls les messages d'erreur seront enregistrés. Dans l'environnement dev
, certains fichiers sont reconstruits à chaque requête (pour la commodité des développeurs), mais sont mis en cache lorsqu'ils arrivent dans l'environnement prod
. Tous les environnements coexistent sur la même machine et exécutent les mêmes programmes. dev
环境下将记录警告和错误级别的日志,但在prod
环境就只记录错误信息。在dev
环境下,有些文件在每一次请求中都被重新构建(为了方便开发者),但到了prod
环境时却被缓存起来。所有的环境都在同一机器下共存,并且执行相同的程序。
一般来说,一个Symfony项目有三种环境(dev
、test
和prod
),但创建一种新的环境是简单的。你可以查看程序在不同环境下的执行效果,只需在浏览器中切换前端控制器。要看dev
环境,访问程序的开发版front controller:
$kernel = new AppKernel('prod', false);
如果你要看看程序在生产环境下的执行情况,换上prod
版前端控制器:
// app/AppKernel.phppublic function registerContainerConfiguration(LoaderInterface $loader){ $loader->load( __DIR__.'/config/config_'.$this->getEnvironment().'.yml' );}
prod
环境专为速度优化,配置信息、路由和Twig模板都被编译成原生php类并缓存起来。当需要查看prod
环境下的改变时,你需要清除这些缓存文件然后重构它们:
YAML:# app/config/config_dev.ymlimports: - { resource: config.yml }framework: router: { resource: "%kernel.root_dir%/config/routing_dev.yml" } profiler: { only_exceptions: false } # ...
如果你打开web/app.php
文件,你可以看到prod
环境被显式地配置好了:
XML:<!-- app/config/config_dev.xml --><?xml version="1.0" encoding="UTF-8" ?><container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:framework="http://symfony.com/schema/dic/symfony" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> <imports> <import resource="config.xml" /> </imports> <framework:config> <framework:router resource="%kernel.root_dir%/config/routing_dev.xml" /> <framework:profiler only-exceptions="false" /> </framework:config> <!-- ... --></container>
你可以为一个新环境创建一个新的前端控制器,拷贝上面这行代码并将prod
换成别的值。
test
环境被用于自动测试(automatic testing),不能通过浏览器直接访问。参考“框架指南”中的测试章节了解更多。
当使用server:run
命令来启动server时,localhost:8000/
dev
, test
et prod
), mais créer un nouvel environnement est simple. Vous pouvez voir les performances de votre programme dans différents environnements en changeant de contrôleur frontal dans le navigateur. Pour voir l'environnement dev
, visitez la version de développement du contrôleur frontal du programme : PHP:// app/config/config_dev.php$loader->import('config.php'); $container->loadFromExtension('framework', array( 'router' => array( 'resource' => '%kernel.root_dir%/config/routing_dev.php', ), 'profiler' => array('only-exceptions' => false),)); // ...
prod code> du serveur de contrôle frontal :
🎜rrreee🎜L'environnement prod
est optimisé pour la vitesse, les informations de configuration, le routage et les modèles Twig sont compilés dans des classes PHP natives et mis en cache. Lorsque vous avez besoin de voir les changements dans l'environnement prod
, vous devez vider ces fichiers cache et les reconstruire : 🎜rrreee🎜Si vous ouvrez le fichier web/app.php
, vous pouvez voir que l'environnement prod
est configuré explicitement : 🎜rrreee🎜Vous pouvez créer un nouveau contrôleur frontal dans un nouvel environnement, copiez la ligne de code ci-dessus et remplacez prod
par une autre valeur. 🎜🎜🎜🎜L'environnement test
est utilisé pour les tests automatiques et ne peut pas accéder directement au navigateur. Consultez le chapitre Tests du Guide du framework pour en savoir plus. 🎜🎜🎜🎜Lorsque vous utilisez la commande server:run
pour démarrer le serveur, localhost:8000/
utilise le contrôleur frontal de développement dans votre programme. 🎜🎜🎜Configuration de l'environnement ¶
AppKernel
est responsable du chargement du fichier de configuration que vous spécifiez : AppKernel
类负责加载你指定的配置文件:
rrreee你已经知道.yml
后缀可以被改为.xml
或.php
,如果你愿意使用XML或PHP来完成配置的话。注意每种环境加载的是它自己的配置文件。看一下dev
环境下的配置文件:
rrreeerrreeerrreeeimport
根键,类似于PHP的include
声明,确保主力配置文件(config.yml
)被首先加载。本文件的剩余部分,用于调整默认配置,强化日志功能和其他一些利于开发环境的设定。
不管是prod
还是test
rrreee#🎜🎜 #you On sait déjà que le suffixe .yml
peut être modifié en .xml
ou .php
si vous souhaitez utiliser XML ou PHP pour terminer la configuration. Notez que chaque environnement charge son propre fichier de configuration. Jetez un œil au fichier de configuration dans l'environnement dev
:
rrreeerrreeerrreeeimport
clé racine, similaire à la clé include de PHP code> pour garantir que le fichier de configuration principal (config.yml
) est chargé en premier. Le reste de ce fichier est utilisé pour ajuster la configuration par défaut, améliorer la fonction de journalisation et d'autres paramètres bénéfiques pour l'environnement de développement.
Qu'il s'agisse de l'environnement prod
ou test
, ils suivent tous le même modèle : chaque environnement importe d'abord le fichier de configuration de base, puis ajuste ses valeurs de configuration, pour s'adapter à leurs environnements spécifiques. Mais ce n'est qu'une convention, vous permettant de réutiliser la plupart du contenu du fichier de configuration et de personnaliser les configurations locales pour différents environnements. #🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜#