2016-07-26 8 views
3

최근에 나는 자신의 사용자로 추가 데이터베이스를 만들었습니다. 따라서 parameters.yml에 여분의 데이터베이스 드라이버를 만들었습니다. 이것은 내가 아는 한, 이런 종류의 상황에 대한 표준 접근법입니다. 지금까지는 작동합니다. 내가 만든 서비스 중 하나에서이 데이터베이스 드라이버를 사용할 수 있습니다. 웹 사이트에서 코드를 실행할 때 전혀 문제가 없습니다.Symfony2는 데이터베이스 드라이버에서 ParameterNotFoundException을 제공합니다.

물론 문제가 있습니다. 그렇지 않으면 나는 당신의 도움을 요청하지 않을 것입니다.

나는 다음과 같은 명령을 실행하여 플러그인을 설치하려고 해요 :

[Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException] 
You have requested a non-existent parameter "database_driver_geo". Did you mean this: "database_driver"? 

Script Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::clearCache handling the post-update-cmd event terminated with an exception 

Installation failed, reverting ./composer.json to its original content. 

[RuntimeException] 
An error occurred when executing the "'cache:clear --no-warmup'" command. 

몇 가지 다른 게시물이 캐시에 대한 오류가 뭔가를 가지고 말 :

$ ./composer.phar require pugx/autocompleter-bundle 

이 다음과 같은 오류를 제공을 파일/dir 권한과 관련이있다. 그러나 지오 드라이버의 구성을 제거하면 이러한 종류의 오류가 나타나지 않기 때문에 문제가되지는 않습니다.

내가 심포니 2.5을 실행하는거야

[편집 : 추가 parameters.yml 파일]

parameters.yml은 다음과 같습니다 내 :

# This file is auto-generated during the composer install 
parameters: 
    # Default database 
    database_driver: pdo_mysql 
    database_host: *** 
    database_port: *** 
    database_name: *** 
    database_user: *** 
    database_password: *** 

    # Geo database 
    database_driver_geo: pdo_mysql 
    database_host_geo: *** 
    database_port_geo: *** 
    database_name_geo: *** 
    database_user_geo: *** 
    database_password_geo: *** 

    mailer_transport: *** 
    mailer_host: *** 
    mailer_user: *** 
    mailer_password: *** 
    locale: *** 
    secret: *** 

[편집 : 추가 config.yml 파일]

의 교리 섹션파일 :

# Doctrine Configuration 
doctrine: 
    dbal: 
     default_connection: default 
     connections: 
      default: 
       driver:   %database_driver% 
       host:   %database_host% 
       port:   %database_port% 
       dbname:   %database_name% 
       user:   %database_user% 
       password:  %database_password% 
       charset:  UTF8 
       mapping_types: 
        enum:  string 
        bit:  integer 
       # if using pdo_sqlite as your database driver, add the path in parameters.yml 
       # e.g. database_path: %kernel.root_dir%/data/data.db3 
       # path:  %database_path% 

      geo: 
       driver:   %database_driver_geo% 
       host:   %database_host_geo% 
       port:   %database_port_geo% 
       dbname:   %database_name_geo% 
       user:   %database_user_geo% 
       password:  %database_password_geo% 
       charset:  UTF8 
       mapping_types: 
        enum:  string 
        bit:  integer 
       # if using pdo_sqlite as your database driver, add the path in parameters.yml 
       # e.g. database_path: %kernel.root_dir%/data/data.db3 
       # path:  %database_path% 

    orm: 
     default_entity_manager: default 
     entity_managers: 
       default: 
        connection: default 
        mappings: 
         ***CoreBundle: ~ 
       geo: 
        connection: geo 
        mappings: 
         ***GeoBundle: ~ 
     auto_generate_proxy_classes: %kernel.debug% 

이 문제를 해결하는 데 도움이되는 사람이 있으면 좋겠습니다.

종류와 관련,

말콤 의견에서 언급 한 바와 같이

+0

parameters.yml 파일을 게시 할 수 있습니까? 민감한 값은 숨기지 만 트리 구조는 유지하십시오. doctrine.dbal.connections 아래 config.yml 파일에 새 엔티티 관리자를 등록 했습니까? – VaN

+1

새로운 작곡가 패키지를 설치할 때'parameters.yml' 파일이 자동으로 다시 작성됩니다. 매개 변수 (또는 적어도 디폴트 값)를'parameters.yml.dist'에 두어야합니다. 그것들은'parameters.yml'에 복사 될 것입니다. –

+0

@VaN : 추가했습니다. –

답변

2

parameters.yml 파일 인 타이틀 작곡가 update 또는 install 명령 다음에 다시 작성됩니다. 당신은 scripts 섹션에서 composer.json 파일에 그것을 볼 수 있습니다 당신이 그것을 좋아하지 않는 경우에 당신은 물론이 기능을 해제 할 수 있습니다

"scripts": { 
    "post-install-cmd": [ 
     "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters", 
     // other commands... 
    ], 
    "post-update-cmd": [ 
     "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters", 
     // other commands... 
    ] 
}, 

. 그러나 제대로 사용하면 유용 할 수 있습니다.

따라서 작곡가를 통해 일부 패키지를 설치하면 parameters.yml에 직접 입력하는 매개 변수가 손실됩니다.

parameters.yml을 빌드하는 데 사용되는 parameters.yml.dist 파일을 사용하면됩니다. 매개 변수가 모든 환경 (prod/dev)마다 다른 경우 응용 프로그램 매개 변수 값 (모든 app 인스턴스에 대해 동일 함) 또는 기본값이 제공되어야합니다.

모든 서버에서 DB 자격 증명이 변경되므로 두 번째 사용 사례 (기본값)입니다. 실제로 기본 DB 연결의 구성과 정확히 동일합니다. parameters.yml.dist에는이 매개 변수의 일부 기본값이 들어 있습니다.