Как иметь учение dbal в symfony?

По некоторым причинам я не хочу, чтобы мои пользователи редактировали /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)
)
)
));

Поскольку это не задокументировано, я хотел бы, чтобы вы пояснили, как я могу сделать это так, как я описал?

2

Решение

Хотя это объясняется в статье, предоставленной 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

Попробуйте и дайте мне знать, если это работает.

Надеюсь, это будет понятнее.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]