2016-07-26 22 views
3

In letzter Zeit habe ich eine zusätzliche Datenbank mit einem eigenen Benutzer erstellt. Daher habe ich einen extra Datenbanktreiber in der parameters.yml erstellt. Soweit ich weiß, ist dies der Standardansatz für diese Art von Situationen. Bis jetzt funktioniert es. In einem der von mir erstellten Dienste kann ich diesen Datenbanktreiber verwenden. Beim Ausführen des Codes auf der Website gibt es überhaupt keine Probleme.Symfony2 gibt eine ParameterNotFoundException für einen Datenbanktreiber aus

Aber natürlich gibt es ein Problem, sonst werde ich nicht um deine Jungs bitten.

Ich versuche, ein Plugin zu installieren, indem Sie den folgenden Befehl ausführen:

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

Dies gibt den folgenden Fehler:

[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. 

Einige andere Beiträge sagen, dass der Fehler über den Cache etwas hat, mit den Datei-/Verzeichnisrechten zu tun haben. Aber das scheint nicht das Problem zu sein, denn wenn die Konfiguration des Geo-Treibers entfernt wird, erscheinen diese Art von Fehlern nicht.

Ich bin mit Symfony 2.5

[EDIT: Added parameters.yml Datei]

Mein parameters.yml sieht wie folgt aus:

# 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: *** 

[EDIT: Hinzugefügt config.yml Datei]

Die Doktrin Abschnitt in der config.yml Datei:

# 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% 

Ich hoffe, es gibt jemanden, der mir helfen kann, dieses Problem zu beheben.

Mit freundlichen Grüßen

Malcolm

+0

Können Sie Ihre parameters.yml Datei veröffentlichen? (Blenden Sie die sensiblen Werte aus, aber behalten Sie bitte die Baumstruktur bei). Haben Sie in der Datei config.yml unter "doctrine.dbal.connections" einen neuen Entity Manager registriert? – VaN

+1

'parameter.yml' wird automatisch neu erstellt, wenn Sie ein neues Composer-Paket installieren. Sie sollten Ihre Parameter (oder zumindest Standardwerte) in 'parameters.yml.dist' ablegen. Sie werden in 'parameters.yml' kopiert. –

+0

@VaN: Ich habe es hinzugefügt. –

Antwort

2

Wie in den Kommentaren erwähnt, wird parameters.yml Datei autmatically nach Komponist update oder install umgebaut Befehl. Sie können in Ihrer composer.json Datei in scripts Abschnitt sehen, dass:

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

Sie können diese Funktion natürlich deaktivieren, wenn Sie es nicht mögen. Aber es kann nützlich sein, wenn es richtig verwendet wird.

Wenn Sie also ein Paket über Composer installieren, verlieren Sie Parameter, die Sie direkt in parameters.yml eingeben.

Was Sie tun sollten, ist die parameters.yml.dist Datei verwenden, die zum Erstellen parameters.yml verwendet wird. Es sollte Anwendungsparameterwerte (wenn sie für jede Instanz der App gleich sind) oder Standardwerte bereitstellen, wenn die Parameter für jede Umgebung (prod/dev) unterschiedlich sind.

In Ihrem Fall ist es der zweite Anwendungsfall (Standardwerte), da die DB-Anmeldeinformationen für jeden Server geändert werden. Es entspricht genau der Konfiguration der Standard-DB-Verbindung. parameters.yml.dist enthält einige Standardwerte für diese Parameter.