По некоторым причинам я не хочу, чтобы мои пользователи редактировали /app/config/config.php
добавить учетные данные базы данных, но в отдельном файле они добавляют их как массив и мой /app/config/config.php
это PHP, а не YAML или XML, так как я могу сказать, /app/config/config.php
получить учетные данные базы данных в виде массива из другого файла?
Я посмотрел на приложение, которое работает так, и я вижу, что они используют:
$container->loadFromExtension('doctrine', array(
'orm' => array(
'auto_generate_proxy_classes' => false,
'default_entity_manager' => 'default',
'entity_managers' => array(
'default' => array('mappings' => array('MyApp' => array('type' => 'staticphp')), 'class_metadata_factory_name' => 'Doctrine\\ORM\\Mapping\\StaticClassMetadataFactory')
)
),
'dbal' => array(
'default_connection' => 'default',
'connections' => array(
'default' => array('host' => 'from_user_config.db', 'logging' => true),
'read' => array('host' => 'from_user_config.db_read', 'logging' => true)
)
)
));
Поскольку это не задокументировано, я хотел бы, чтобы вы пояснили, как я могу сделать это так, как я описал?
Хотя это объясняется в статье, предоставленной Qoop, я должен признать, что это объяснение немного расплывчато, поэтому я собираюсь уточнить, если оно поможет вам.
Во-первых, в вашем app/config/config.php
включите следующую строку.
// app/config/config.php
$loader->import('my_custom_parameters.php');
создать файл my_custom_parameters.php
(пример документации я приведу позже).
// app/config/my_custom_parameters.php
include_once('/path/to/drupal/sites/default/settings.php');
$container->setParameter('drupal.database.url', $db_url);
В примере документации есть другой импорт, если вы хотите, чтобы ваши настройки были сохранены где-то еще. Это не обязательно, и вы можете включить переменные непосредственно в parameters.php
если хочешь.
Для простоты я собираюсь избавиться от include_once
и я собираюсь изменить учетные данные напрямую.
// app/config/my_custom_parameters.php
$container->setParameter('database_name', 'the_db_I_want');
$container->setParameter('database_user', 'the_user_I_want');
$container->setParameter('database_password', 'the_pass_I_want');
Как видите, вы можете переопределить столько параметров, сколько захотите.
ОБНОВИТЬ
Вы также можете попробовать это (не проверял, но думаю, что будет работать):
// app/config/my_custom_parameters.php
include_once('/path/to/where/people/can/modify/settings.php');
$container->loadFromExtension('doctrine', array(
'orm' => array(
'auto_generate_proxy_classes' => $variable_from_settings_php,
'default_entity_manager' => $another_variable_from_settins_php,
'entity_managers' => array(
'default' => array('mappings' => array('MyApp' => array('type' => 'staticphp')), 'class_metadata_factory_name' => 'Doctrine\\ORM\\Mapping\\StaticClassMetadataFactory')
)
),
'dbal' => array(
'default_connection' => 'default',
'connections' => array(
'default' => array('host' => 'from_user_config.db', 'logging' => true),
'read' => array('host' => 'from_user_config.db_read', 'logging' => true)
)
)
Я использую код, который вы предоставили. Вы можете использовать конфигурацию, которая вам нравится. Я добавил несколько фиктивных переменных, которые можно загрузить из файла, импортированного как значения параметров, просто чтобы показать вам, что, теоретически, вы можете сделать что-то подобное.
Как вы можете прочитать в документация (часть, рассказывающая о настройке bd, называется «Конфигурирование базы данных»):
Определение конфигурации с помощью parameters.yml — это просто соглашение.
На параметры, определенные в этом файле, ссылаются основные
файл конфигурации при настройке Doctrine
Попробуйте и дайте мне знать, если это работает.
Надеюсь, это будет понятнее.
Других решений пока нет …