Mengkonfigurasi Symfony (dan persekitaran)
Program Symfony terdiri daripada satu set berkas "bertanggungjawab untuk membentangkan semua fungsi dan kemungkinan". Setiap berkas boleh disesuaikan melalui fail konfigurasi dalam format YAML, XML atau PHP. Fail konfigurasi utama lalai berada dalam direktori app/config/
, yang boleh menjadi config.yml
, config.xml
atau config .php
, bergantung pada pilihan anda: 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/10Dalam bahagian persekitaran di bawah, anda akan menentukan cara fail dalam setiap format dimuatkan.
Setiap nod akar, seperti
ranting
, mentakrifkan maklumat konfigurasi bagi berkas yang sepadan. Contohnya, kekunci framework
mentakrifkan maklumat konfigurasi FrameworkBundle yang digunakan dalam teras Symfony, termasuk konfigurasi penghalaan, konfigurasi templat dan konfigurasi kernel lain. - 🎜YAML: mudah, jelas dan sangat mudah dibaca. (Ketahui lebih lanjut melalui komponen YAML) 🎜
- 🎜XML: Kadangkala lebih berkuasa daripada YAML dan menyokong pelengkapan automatik kod IDE. 🎜
- 🎜PHP: Sangat berkuasa, tetapi kurang boleh dibaca berbanding format konfigurasi standard. 🎜
Pelucutan maklumat konfigurasi lalai ¶
🎜Anda boleh menanggalkan maklumat konfigurasi lalai dalam format YAML bagi berkas yang ditentukan melalui baris arahanconfig:dump- arahan reference
. Berikut ialah contoh pelucutan maklumat konfigurasi lalai FrameworkBundle: 🎜localhost/app_dev.php/random/10🎜Nama samaran peribadi lanjutan (nod akar dalam fail konfigurasi) juga boleh digunakan: 🎜
$ php bin/console cache:clear --env=prod --no-debug🎜🎜🎜Sila rujuk artikel buku masakan Cara memuatkan maklumat konfigurasi perkhidmatan dalam himpunan, untuk Dapatkan kandungan berkaitan tentang "Tambah maklumat konfigurasi pada berkas anda sendiri". 🎜🎜🎜
Persekitaran ¶
Satu set program boleh dijalankan dalam berbilang persekitaran. Persekitaran yang berbeza berkongsi kod PHP yang sama (kecuali pengawal bahagian hadapan), tetapi menggunakan fail konfigurasi yang berbeza. Contohnya, dalam persekitaran dev
, log tahap amaran dan ralat akan dilog, tetapi dalam persekitaran prod
, hanya mesej ralat akan dilog. Dalam persekitaran dev
, sesetengah fail dibina semula pada setiap permintaan (untuk kemudahan pembangun), tetapi dicache apabila ia tiba dalam persekitaran prod
. Semua persekitaran wujud bersama pada mesin yang sama dan melaksanakan program yang sama. 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
dan prod
), tetapi mencipta Planting persekitaran baru adalah mudah. Anda boleh melihat prestasi program anda dalam persekitaran yang berbeza dengan menukar pengawal bahagian hadapan dalam penyemak imbas. Untuk melihat persekitaran dev
, lawati versi pembangunan pengawal hadapan program: 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),)); // ...
#🎜🎜#rrreee#🎜🎜#
prod
persekitaran dioptimumkan untuk kelajuan, maklumat konfigurasi, penghalaan dan templat Twig dihimpunkan ke dalam kelas PHP asli dan Cached. Apabila anda perlu melihat perubahan dalam persekitaran prod
, anda perlu mengosongkan fail cache ini dan membinanya semula: #🎜🎜#rrreeeweb/app.php
, anda boleh melihat bahawa persekitaran prod
dikonfigurasikan secara eksplisit: # 🎜🎜#rrreee#🎜🎜#Anda boleh mencipta pengawal hadapan baharu untuk persekitaran baharu, salin baris kod di atas dan gantikan prod
dengan nilai lain. #🎜🎜##🎜🎜##🎜🎜#server:run< Apabila menggunakan arahan /code> untuk memulakan pelayan, localhost:8000/
menggunakan pengawal front-end dev dalam program anda. #🎜🎜##🎜🎜##🎜🎜#Konfigurasi persekitaran ¶
Kelas AppKernel
bertanggungjawab untuk memuatkan fail konfigurasi yang anda tentukan: AppKernel
类负责加载你指定的配置文件:
rrreee你已经知道.yml
后缀可以被改为.xml
或.php
,如果你愿意使用XML或PHP来完成配置的话。注意每种环境加载的是它自己的配置文件。看一下dev
环境下的配置文件:
rrreeerrreeerrreeeimport
根键,类似于PHP的include
声明,确保主力配置文件(config.yml
)被首先加载。本文件的剩余部分,用于调整默认配置,强化日志功能和其他一些利于开发环境的设定。
不管是prod
还是test
rrreee
Anda sudah tahu bahawa akhiran .yml
boleh ditukar kepada .xml
atau .php
, jika anda sanggup menggunakan XML atau PHP untuk melengkapkan konfigurasi. Ambil perhatian bahawa setiap persekitaran memuatkan fail konfigurasinya sendiri. Lihat fail konfigurasi dalam persekitaran dev
:
rrreeerrreeerrreeeimport
kekunci akar, serupa dengan pernyataan include
PHP, memastikan bahawa fail konfigurasi utama ( config.yml
) dimuatkan dahulu. Baki fail ini digunakan untuk melaraskan konfigurasi lalai, meningkatkan fungsi pengelogan dan tetapan lain yang bermanfaat kepada persekitaran pembangunan.
prod
atau test
, semuanya mengikut model yang sama: setiap persekitaran mengimport fail konfigurasi asas dahulu, dan kemudian melaraskan nilai konfigurasinya untuk memenuhi keperluan khusus mereka. Tetapi ini hanyalah konvensyen, membolehkan anda menggunakan semula kebanyakan kandungan dalam fail konfigurasi dan menyesuaikan konfigurasi setempat untuk persekitaran yang berbeza. 🎜🎜🎜🎜🎜