Symfony(및 환경) 구성


Symfony 프로그램은 "모든 기능과 가능성을 제시하는" 번들 세트로 구성됩니다. 각 번들은 YAML, XML 또는 PHP 형식의 구성 파일을 통해 사용자 정의할 수 있습니다. 기본 기본 구성 파일은 app/config/ 디렉터리에 있으며 config.yml, config.xml 또는 config일 수 있습니다. .php(기본 설정에 따라): 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

아래 환경 섹션에서 각 형식의 파일이 로드되는 방법을 지정합니다.

framework 또는 twig와 같은 각 루트 노드는 해당 번들의 구성 정보를 정의합니다. 예를 들어 framework 키는 라우팅 구성, 템플릿 구성 및 기타 커널 구성을 포함하여 Symfony 코어에서 사용되는 FrameworkBundle의 구성 정보를 정의합니다.
이제 각 루트 노드 아래의 특정 구성 옵션에 대해 걱정할 필요가 없습니다. 구성 파일에는 몇 가지 의미 있는 기본 구성이 미리 로드되어 있습니다. Symfony의 각 부분을 자세히 연구하고 탐색하면서 각 기능에 대한 특정 구성 옵션의 의미를 이해하게 될 것입니다.

구성 파일

이 장의 모든 구성 정보 루틴은 세 가지 형식(YAML, XML 및 PHP)으로 표시됩니다. 각각 장단점이 있으므로 선택하는 것은 귀하에게 달려 있습니다.
  • 🎜YAML: 간단하고 명확하며 읽기 쉽습니다. (YAML 구성 요소를 통해 자세히 알아보기) 🎜
  • 🎜XML: 때로는 YAML보다 더 강력하며 IDE 코드 자동 완성을 지원합니다. 🎜
  • 🎜PHP: 매우 강력하지만 표준 구성 형식보다 가독성이 떨어집니다. 🎜
🎜🎜

기본 구성 정보 제거 ¶

🎜명령줄 config:dump-를 통해 지정된 번들의 YAML 형식으로 기본 구성 정보를 제거할 수 있습니다. 참조 명령. 다음은 FrameworkBundle의 기본 구성 정보를 제거하는 예입니다. 🎜
localhost/app_dev.php/random/10
🎜확장 개인 가명(구성 파일의 루트 노드)도 사용할 수 있습니다. 🎜
$  php bin/console cache:clear --env=prod --no-debug
🎜🎜🎜쿡북 문서 로드 방법을 참조하세요. 번들에 있는 서비스의 구성 정보, "자신의 번들에 구성 정보 추가"에서 관련 콘텐츠를 가져옵니다. 🎜🎜🎜

환경 ¶

프로그램 세트는 여러 환경에서 실행될 수 있습니다. 다양한 환경은 동일한 PHP 코드(프런트엔드 컨트롤러 제외)를 공유하지만 다른 구성 파일을 사용합니다. 예를 들어 dev 환경에서는 경고 및 오류 수준 로그가 기록되지만 prod 환경에서는 오류 메시지만 기록됩니다. dev 환경에서 일부 파일은 개발자의 편의를 위해 요청이 있을 때마다 다시 작성되지만 prod 환경에 도착하면 캐시됩니다. 모든 환경은 동일한 시스템에 공존하고 동일한 프로그램을 실행합니다. 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/

일반적으로 Symfony 프로젝트에는 세 가지 환경(dev, testprod)이 있지만 새로운 환경을 만드는 것은 간단합니다. 브라우저에서 프런트엔드 컨트롤러를 전환하여 다양한 환경에서 프로그램이 어떻게 작동하는지 확인할 수 있습니다. dev 환경을 보려면 프로그램 프론트 컨트롤러의 개발 버전을 방문하세요:
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 버전의 프런트 엔드 제어 서버:
🎜rrreee🎜prod 환경은 속도, 구성 정보, 라우팅에 최적화되어 있으며 Twig 템플릿은 기본 PHP 클래스로 컴파일되고 캐시됩니다. prod 환경의 변경 사항을 확인해야 하는 경우 다음 캐시 파일을 지우고 재구성해야 합니다. 🎜rrreee
🎜web/app.php 파일을 열면 prod 환경이 명시적으로 구성되어 있음을 확인할 수 있습니다. 🎜rrreee🎜 새 환경의 새 전면 컨트롤러인 경우 위의 코드 줄을 복사하고 prod를 다른 값으로 바꾸세요. 🎜🎜🎜
🎜test 환경은 자동 테스트에 사용되며 브라우저 액세스를 직접 통과할 수 없습니다. 자세한 내용은 프레임워크 가이드의 테스트 장을 참조하세요. 🎜🎜🎜
🎜server:run 명령을 사용하여 서버를 시작하는 경우 localhost:8000/는 프로그램에서 개발 프런트엔드 컨트롤러를 사용합니다. 🎜🎜🎜

환경 구성

AppKernel 클래스는 지정한 구성 파일을 로드하는 역할을 담당합니다. AppKernel类负责加载你指定的配置文件:

rrreee

你已经知道.yml后缀可以被改为.xml.php,如果你愿意使用XML或PHP来完成配置的话。注意每种环境加载的是它自己的配置文件。看一下dev环境下的配置文件:

rrreeerrreeerrreee

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

不管是prod还是testrrreee

.yml 접미사가 다음으로 변경될 수 있다는 것을 이미 알고 계십니다. .xml 또는 .php(XML 또는 PHP를 사용하여 구성을 완료하려는 경우) 각 환경은 자체 구성 파일을 로드합니다. dev 환경에서 구성 파일을 살펴보세요.

rrreeerrreeerrreee
import 루트 키는 PHP의 include 문과 유사하며 다음을 보장합니다. 기본 구성 파일( config.yml)이 먼저 로드됩니다. 이 파일의 나머지 부분은 기본 구성을 조정하고, 로깅 기능을 향상시키며, 개발 환경에 유용한 기타 설정을 수행하는 데 사용됩니다.

🎜prod 환경이든 test 환경이든 모두 동일한 모델을 따릅니다. 각 환경은 먼저 기본 구성 파일을 가져온 다음 구성 값을 조정합니다. ​특정 환경에 맞게. 그러나 이는 단지 규칙일 뿐이므로 구성 파일의 대부분의 콘텐츠를 재사용하고 다양한 환경에 맞게 로컬 구성을 사용자 지정할 수 있습니다. 🎜🎜🎜🎜🎜