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.ymlconfig.xmlconfig.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%',)); // ...

在下面的环境小节中,你将会明确每种格式的文件是如何被加载的。

每一个根节点,比如frameworktwig,定义了相应bundle的配置信息。例如,framework键所定义的,是用于Symfony核心的FrameworkBundle之配置信息,包括路由配置、模板配置以及其他内核配置。

现在,毋须担心每个根节点下的特定配置选项。配置文件预装了一些有意义的默认配置。当你详细研读和探索Symfony每一个部分时,你将会掌握每一个功能的特定配置选项之意义。

配置文件的

本章的全部配置信息例程,都将以三种格式展示(YAML、XML和PHP)。每种各有短长,全凭你来选择:

  • YAML:简单、清楚、可读性强。(通过YAML组件了解更多)

  • XML:某些时候比YAML威力强大,而且支持IDE的代码自动完成。

  • PHP:非常强大,但相比标准配置格式缺乏可读性。

默认配置信息的剥离 ¶

你可以剥离出指定bundle的YAML格式的默认配置信息,通过命令行的config:dump-reference

$  php bin/console config:dump-reference FrameworkBundle
$  php bin/console config:dump-reference framework
localhost/app_dev.php/random/10

Dalam bahagian persekitaran di bawah, anda akan menentukan cara fail dalam setiap format dimuatkan.

Setiap nod akar, seperti rangka kerja atau 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.
Kini, tidak perlu risau tentang pilihan konfigurasi khusus di bawah setiap nod akar. Fail konfigurasi disertakan dengan beberapa konfigurasi lalai yang bermakna. Semasa anda mengkaji dan meneroka setiap bahagian Symfony secara terperinci, anda akan memahami maksud pilihan konfigurasi khusus untuk setiap ciri.

Fail konfigurasi

Semua rutin maklumat konfigurasi dalam bab ini akan dipaparkan dalam tiga format (YAML, XML dan PHP). Setiap satu mempunyai kebaikan dan keburukan tersendiri, terpulang kepada anda untuk memilih:
  • 🎜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 arahan config: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项目有三种环境(devtestprod),但创建一种新的环境是简单的。你可以查看程序在不同环境下的执行效果,只需在浏览器中切换前端控制器。要看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/

Secara umumnya, projek Symfony mempunyai tiga persekitaran (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),)); 
// ...
Jika anda ingin melihat pelaksanaan program dalam persekitaran pengeluaran, tukar kepada < code>prod< /code>version front-end controller:
#🎜🎜#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: #🎜🎜#rrreee
#🎜🎜#Jika anda membuka fail web/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. #🎜🎜##🎜🎜##🎜🎜#
#🎜🎜#ujian persekitaran Ia digunakan untuk ujian automatik dan tidak boleh diakses terus melalui penyemak imbas. Lihat bab Pengujian dalam Panduan Rangka Kerja untuk mengetahui lebih lanjut. #🎜🎜##🎜🎜##🎜🎜#
#🎜🎜#Apabila menggunakan 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环境下的配置文件:

rrreeerrreeerrreee

import根键,类似于PHP的include声明,确保主力配置文件(config.yml)被首先加载。本文件的剩余部分,用于调整默认配置,强化日志功能和其他一些利于开发环境的设定。

不管是prod还是testrrreee

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:

rrreeerrreeerrreee
import 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.

🎜Sama ada persekitaran 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. 🎜🎜🎜🎜🎜