Как использовать Symfony2 с MongoDB на cloudControl?
Я хотел бы использовать Symfony2 и MongoDB в контейнере cloudControl (поставщик PaaS, например, heroku). Теперь Symfony2 поддерживает использование MongoDB:
# app/config/config.yml
doctrine_mongodb:
connections:
default:
server: mongodb://localhost:27017
options: {}
default_database: test_database
document_managers:
default:
auto_mapping: true
И поскольку MongoDB является надстройкой PaaS, у меня нет статических учетных данных для подключения. Они генерируются контейнером. cloudControl предлагает такой способ доступа к учетным данным в PHP:
$credfile = file_get_contents($_ENV['CRED_FILE'], false);
$credentials = json_decode($credfile, true);
$uri = $credentials["MONGOLAB"]["MONGOLAB_URI"];
$m = new Mongo($uri);
$db = $m->selectDB(myDbName);
$col = new MongoCollection($db, myCollection);
Как я могу получить эти динамически извлеченные учетные данные в Symfony2? config.yml
?
1 ответ
Решение
Решением было бы использовать Разную конфигурацию Symfony2.
Итак, создайте app/config/credentials.php
файл с содержанием ниже:
<?php
if (isset($_ENV['CRED_FILE'])) {
// read the credentials file
$string = file_get_contents($_ENV['CRED_FILE'], false);
if ($string == false) {
throw new Exception('Could not read credentials file');
}
// the file contains a JSON string, decode it and return an associative array
$creds = json_decode($string, true);
// overwrite config server param with mongolab uri
$uri = $creds["MONGOLAB"]["MONGOLAB_URI"];
$container->setParameter('doctrine_mongodb.connections.default.server', $uri);
}
Тогда в вашем app/config/config.yml
добавлять:
imports:
- { resource: credentials.php }
Дайте мне знать, если это решит вашу проблему.